【仕事メモ】OpenAM(Ver13) Office365との認証連携（１）

# おさらい
前回までの記事でOpenAMおよびデータストアとして動作するためのOpenDJをインストールし、
OpenDJ上に作成したローカルアカウントでOpenAMの管理コンソールにログインする動作までの確認を実施しました。

今回はOpenDJ上に作成したユーザーの認証情報を利用してOffice365へログインする動作を確認します。

## IdPの設定（証明書登録）
__2018/8/12 追記__
証明書の登録方法に誤りがあったようです。
以前、掲載した記事の方法ではIdPの証明書を確認しようとすると証明書の情報が出力されず確認することができないため、その後の工程を実施できない(詰み)状態になりました。

というわけで、IdPの証明書登録手順を改めて記載します。

まずはキーストアと鍵ペアの作成を以下のコマンドを実行して作成します。

```bash:キーストア作成
keytool -genkeypair \
-keyalg rsa \
-alias openam-idp \
-dname "CN定義" \
-keypass R8g%kWg3 \        # 署名鍵のパスワードを指定
-keystore mykeystore.jks \ # キーストアファイル名を指定
-storepass changeit \      # キーストアのパスワードを指定
-validity 3650 \           # 鍵の有効期限を指定(例：10 年)
-keysize 2048              # 鍵の長さを指定
```

次に作成したキーストアをOpenAM側でも認識できる場所に配置します。
配置する際の注意点として、tomcatもアクセス可能な形でパーミッションを設定することです。
※ファイルのパスは実行する環境に応じて適宜、変更してください。

```bash:キーストアの配置
mkdir -p /usr/share/tomcat/openam/openam/private
cp mykeystore.jks /usr/share/tomcat/openam/openam/private
chown -R root:tomcat /usr/share/tomcat/openam/openam/private
chmod 750 /usr/share/tomcat/openam/openam/private
chmod 640 /usr/share/tomcat/openam/openam/private/mykeystore.jks
```

これでキーストアの配置までが完了しました。
次にキーストアと鍵ペアに設定されているパスワードを符号化してテキストファイルに保存します。
このテキストファイルはOpenAMがキーストアと鍵ペアを読み込む際に使用します。
パスワードの符号化はOpenAM管理コンソールから実施します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/0a0bb562-47e1-6759-b964-2340deb75061.png)

上記のようにパスワードを入力する欄が表示されるのでキーストアファイル作成時に指定したパスワード(↑の例だとchangeit)を入力してください。
入力し終えると下記のように符号化されたパスワードが表示されます。

<img width="228" alt="バックアップ２.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/138274/3bd924ba-ae84-861a-32ee-f4b39176e258.png">

以下のコマンドを実行して符号化したパスワードを下記2つのファイルとしてOpenAMサーバ上に保存します。
__※保存する際の注意事項として改行コードが入らないようにしてください。__
__　改行コードが入っているとファイルの読み込みに失敗するそうです。__

```bash:キーストアパスワードファイル作成
vi /usr/share/tomcat/openam/openam/private/.storepass
vi /usr/share/tomcat/openam/openam/private/.keypass
```

パーミッションも変更しておきます。

```bash:パーミッション変更
chown root:tomcat /usr/share/tomcat/openam/openam/private/.storepass
chown root:tomcat /usr/share/tomcat/openam/openam/private/.keypass
chmod 640 /usr/share/tomcat/openam/openam/private/.storepass
chmod 640 /usr/share/tomcat/openam/openam/private/.keypass
```

ここまででSSHでの操作は終わって、管理コンソールからの操作になります。
OpenAM管理コンソールトップページの「CONFIGURATION」‐「サーバーおよびサイト」‐「デフォルトのサーバー設定値」‐「セキュリティ」を表示します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/b9474cf4-16b5-674e-2f8e-9c807172339e.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/71084895-4f3d-5685-22c5-4ee7120d407b.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/ac427e65-7fb9-828a-e414-736e785510f0.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/71335db6-cbb3-b9aa-2064-b5ea04983cd8.png)

キーストア、パスファイル、証明書エイリアスを指定する項目があるので、それぞれ設定値を以下のように変更し「保存」をクリックします。

```:設定値
「キーストアファイル」：/usr/share/tomcat/openam/openam/private/mykeystore.jks
「キーストアパスワードファイル」：/usr/share/tomcat/openam/openam/private/.storepass
「非公開鍵パスワードファイル」：/usr/share/tomcat/openam/openam/private/.keypass
「証明書エイリアス」：openam-idp
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/54ab5220-9dee-1e2e-dc6c-a4e88fb4a5e8.png)

管理コンソールでの設定が完了したら、下記のようにTomcatサービスを再起動してください。

```bash:Tomcat再起動
systemctl restart tomcat
```

## トラストサークルとIdP設定登録
OpenAM管理コンソールでの操作です。
まずトップ画面から「REALMS」-「Realm Overview」を表示します。
そして、画面から「Create SAMLv2 Providers 」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/cdf73a36-f39d-6b39-3653-affe02ccb580.png)

次に「Create Hosted Identity Provider」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/0d57a1ce-b95c-fb20-2200-5d8aae0fe0c1.png)

そうすると↓の画面が表示されるので、それぞれ下記の通り入力してください。
入力が完了したら「設定」をクリックします。

　・このプロバイダのメタデータがありますか？：いいえ(デフォルト)
　・名前：そのまま(デフォルト)
　・署名鍵：openam-idp
　・新しいトラストサークル：任意の名称

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/ce2d8518-bc41-f1ef-95cc-ad1b08ec89ac.png)

↓の画面が表示されれば、IdPの設定は完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/dc62d6eb-9ea3-e00d-2c00-81b0ea7f89ee.png)

IdPの登録が完了したら、証明書の情報が参照できるかを確認しましょう。
以下のURLでも設定を確認できます。

```:SAML設定確認のURL
http://【OpenAMホスト名】:8080/openam/saml2/jsp/exportmetadata.jsp
```
ds:X509Certificateタグに証明書の情報(↓の画像で黒塗り部分)が表示されていればOKです。

<img width="920" alt="バックアップ3.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/138274/a04eccf8-bc47-4c8e-296a-fabee279d424.png">


## SP設定登録
まずは↓のURLよりOffice365のメタデータをダウンロードします。

```powershell:Office365のメタデータURL
https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml
```

ちなみにSAMLにおけるメタデータとは下記の意味を持っています。

```powershell:メタデータ説明
メタデータファイルとは、COT 内の特定のエンティティー (SP/IDP) のプロトコル設定と
信頼情報を含む (SAMLv2 仕様に従った) XML ファイルです。
メタデータファイルはパートナーから受信しているか、または自分で作成している可能性があります。
```

メタデータの<Signature>タグ部分を削除します。

```xml:Office365メタデータ
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_0c0d1ca7-7292-4bc6-801c-f880f6098f4e"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>7XES82rGE5v/Hdsytuvg9wp8iBE=</DigestValue></Reference></SignedInfo><SignatureValue>OOSrXuQqx/V/XjkOnEMuSVaGsb5a25e5kT5ntSDn6TwVjQR35l1o918OoEzF0+KNe+MZhfGdzzntFsG96Ifq8lM8hcVzwG6/xH9Ar+jdwSe7cemd3j7d48H1WIIx6M60rzHlkHnegbrXbUwWZLGAGyQu/P2z9Z8lIjzzjbZi0THFx5aZR5goI91N6eLYBP3ms75QDTb3749InVb+Yc//klycFkFfa5kViDqkNJULw8d+S6BGPsfzd+V72ih16YLegHLZAOhv0Te07QiVgFvNbArcJcyUbXZf+VHW4XyG2YYCL1F1cwT5GFDdemq7Fc+TacEPqq5SxsAq7Nu9pM78Sg==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIDYDCCAkigAwIBAgIJALLJPAyvf2sjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDA3MTgxOTUzNDBaFw0xOTA3MTcxOTUzNDBaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANYDKgByFZdqtTnnpF4IfIp4i2XLg2rLIo+mu4DmW9gRLlBJCNc7YESUxpKzuFYaANd8fWsDigJZTXbhOQApSpw4xXFnor2vJ1zm94LtqjcVEXTjUml5gAIS4pwuOU3ZfO/0eTG0gDYp4a0L/mzzTRsnwe/8WMPIE75Bq2zAyAZ9aePvl3QX7cXYLPfeK4QTgK3B5lwe1wWu3y5oQidjcSok8Frf80xzuCYuOa+ZUK3JibpLLCrT4uwiqf+KREDSdc4bPPlq0PWI4sQr1tha8yypRSvOH+/MxcfSRSnl6Uc+gm8nVEEWWIu4hhu6NIfG91mMUqJuzkgLCi6Gov6JS8UCAwEAAaOBijCBhzAdBgNVHQ4EFgQUnQoq7sI3R8rde4sQs6nGEbJm3LcwWQYDVR0jBFIwUIAUnQoq7sI3R8rde4sQs6nGEbJm3LehLaQrMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJALLJPAyvf2sjMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAf4jaNhKzRG3k+52WoM9nnISP7rlWIeWwH6EQGUlF6ozSP/03gYMAdqpdhww5zNwKzi7TQVbDC0pgq/tqzHv6JEI0R4B6h7/TJ1pYPxdvIFQrE27RHESltH/m+5UkVnayLqRD3/fi4zf4aEpxSDZ73MCR5LanPGqvlAMz29AL3g1ynj+eu7xMfFsM/8+qJaCXuxT5/30eeLEe+PYikA/PhEwp+qkDQWPvdAwEghuUaFvtKAgDZierjpGzHZnYkXTTDTHVe1iP7tsAJH5qK3qdcv3UGPyZrjC/lietJcAcnwVoZQ93v2ieGfcKKN+PFN9M59/BkPo62HPoGNNx2ZDQaQ==</X509Certificate></X509Data></KeyInfo></Signature>
```

ファイルの加工が終わったらOpenAMにアップロードします。

トップ画面から「REALMS」-「Realm Overview」を表示します。
そして、画面から「Create SAMLv2 Providers 」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/cdf73a36-f39d-6b39-3653-affe02ccb580.png)

次に「Register Remote Service Provider」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/e0bcd18a-b7b2-0f87-5ccc-638d8ff86262.png)

「メタデータファイルはどこに存在しますか？」欄で「ファイル」にチェックを入れ、メタデータが配置されているURLに「アップロード」ボタンが表示されるので、クリックすると↓の画面が表示されます。
先ほど加工したメタデータをアップロードします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/33a0ef41-24a6-eae4-0f5e-72fc4451a30b.png)

トラストサークル欄には任意の名称を入力して「設定」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/6b65c94a-1fb7-1d41-238a-5d2ff18616fe.png)

↓の画面が表示されれば、OpenAM上でのSP登録が完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/0150b164-2a53-912a-3092-820ae912a29f.png)

SPが登録されたことを確認するにはトップ画面から「FEDERATION」を選択し、
「連携」設定画面上の「トラストサークル」項目で設定が認識されていることを確認できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/b4dbb410-bd5a-e545-6fd1-8fb5843528c6.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/857b3c0d-1abc-d97c-d921-27de1160c861.png)

## 次回予告
OpenAM上でOffice365とOpenAMのアカウント属性をマッピングする設定を記載します。