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

# 前回のおさらい
前回まででOpenAM側のSAML連携受け入れ態勢が整いました。
今回はSAML連携を行う対象のOffice365テナントに対して、OpenAMとの連携するための設定を行っていきます。
なお、この手順はOffice365テナントの取得が完了していることを前提とします。
取得の仕方は色々な方たちが記事にアップしていますので検索してもらえればと思います。

## Office365へ設定するIdPの情報を確認
Office365へ登録するIdPの設定を確認しておきます。
前回の記事に記載したURLにアクセスして設定値を確認します。

__【仕事メモ】OpenAM(Ver13) Office365との認証連携（１）__
https://qiita.com/Blue2012/items/457de2e1e8595cd01adf

アクセス先のURLは下記になります。

```:SAML設定確認のURL
http://【OpenAMホスト名】:8080/openam/saml2/jsp/exportmetadata.jsp
```

## Office365テナントへの接続
まずはOffice365へ接続するためのPowershellモジュールをインストールします。
現在はMSOnline (Azure AD v1)からAzure AD for Graph (Azure AD v2)に変更されています。
__※既にインストール済みである方はこの手順はスキップしてOKです。__

モジュールをインストールするところから始めます。
WindowsのPCからPowershellを管理者権限で立ち上げて、以下のコマンドを実行します。

```powershell:インストールコマンド
Install-Module -Name AzureAD
```
実行すると下記のような感じでリポジトリにアクセスするためのプロバイダーが必要だとか、信頼されていないリポジトリをインストールすることについて確認されますが、全てY(はい)を実行してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/01566e4b-5f3b-3439-9978-d3c604b9a25d.png)

Y(はい)を実行するとやがてインストールが完了します。
上記の画像みたいにPowerShell上でプロンプトが返ってくればOKです。

インストールが完了したら、以下のコマンドを実行します。

```powershell:AzureADとの接続コマンド
Connect-AzureAD
```

上記のコマンドを実行すると以下のようにテナントへの接続画面が表示されます。
サインイン画面にて「アカウント」を入力し「次へ」をクリックし、
次の画面でパスワードを入力します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/cc27ced2-284f-5f5d-033a-46d6a2459195.png)

接続が完了するとPowershell画面に以下のように接続アカウントの情報が出力されます。

```powershell:実行結果
Account                       Environment   TenantId  TenantDomain         AccountType
-------                       -----------   -------   ------------         -----------
xxxx@xxxx.onmicrosoft.com     AzureCloud    xxxxx     xxxx.onmicrosoft.com User
```

これだけではOffice365サービスの各種サブスクリプションも含めたコマンド全てを実行できないため、さらに以下のコマンド実行します。
私は1回目のコマンドはAzureADに接続するため、2回目のコマンドはOffice365サービスに接続するために実施すると覚えました。

```powershell:MSonlineサービスへの接続コマンド
Connect-MsolService
```
これで各種コマンドを実行できるようになりましたので、以下のコマンドを実行して、現在のテナント認証設定を確認します。

```powershell:テナント認証設定確認コマンド
Get-MsolDomain
```
コマンドを実行すると以下のような出力結果となるはずです。

```powershell:実行結果
Name                    　　　Status     Authentication
----                    　　　------     --------------
xxxx.onmicrosoft.com    　　  Verified   Managed
xxxx.xxxx.info(独自ドメイン)   Verified   Managed
```

onmicrosoft.comと独自ドメインの「Authentication」が両方とも「Managed」になっていることを確認します。(Federationになっていないことを確認します)

__※大事な注意点※
onmicrosoft.comドメインはフェデレーションを有効化することができないため、Office365の管理センターから独自ドメインを「既定ドメイン」に設定しておく必要があります。これはonmicrosoft.comドメインに対してフェデレーションを有効化できないことに加えて、フェデレーションを有効にするには「既定のドメイン」を指定する必要があるためです。__


管理センターの左側に表示されているメニューのなかから「セットアップ」‐「ドメイン」を選択します。

![00.jpg](https://qiita-image-store.s3.amazonaws.com/0/138274/360c2886-1471-76a8-bdc9-da0e3637eec2.jpeg)

以下のようにonmicrosoft.comドメイン名の右隣に（既定）と表示されていればOKです。

<img width="455" alt="01.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/138274/71cf9392-ab5c-4390-afd0-2e45853def10.jpeg">

## Office365のフェデレーション認証設定
__2018/08/16 追記 大事な注意点としてOffice365に既定で用意されているonmicrosoft.comドメインではフェデレーションを有効にできないです。Office365への独自ドメイン登録が必要になるのでご注意ください。__

ここからは簡単です。
Powershellからコマンドを実行してOpenAMとのフェデレーション有効にします。
実行するコマンドは以下のコマンドになります。

```powershell:Set-MsolDomainAuthenticationコマンド
Set-MsolDomainAuthentication -DomainName $dom -FederationBrandName eIdentity -Authentication Federated -PassiveLogOnUri $url -SigningCertificate $cert -IssuerUri $entity -ActiveLogOnUri $ecp -LogOffUri $logout -PreferredAuthenticationProtocol SAMLP
```

使用するオプションは以下になります。

```powershell:オプションの意味
DomainName:　フェデレーションを設定するドメイン名

FederationBrandName:　任意の名称

Authentication:　認証形式（Federatedで固定）

PassiveLogOnUri:　IdPメタデータ内のタグ内のLocation属性の値

SigningCertificate:　IdPメタデータ内の証明書タグの中身

IssuerUri:　IdPメタデータ内のタグ内のentityID属性の値

ActiveLogOnUri:　IdPメタデータ内のタグ内のLocation属性の値(Binding属性の値が「urn:oasis:names:tc:SAML:2.0:bindings:SOAP」のもの) ※HTTPSでないと設定できないため、ダミーのURLでも構わないのでHTTPSを指定する

LogOffUri:　IdPメタデータ内のタグ内のLocation属性の値(※Binding属性の値が「urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect」のもの)

PreferredAuthenticationProtocol:利用するプロトコルを指定(SAMLの場合はSAMLP)
```
上記のオプションで使用する値は「Office365へ設定するIdPの情報を確認」の手順で確認した値を使用します。
Powershell上でテナントへ接続した状態で↓のようにコマンドオプションを指定した上で↑で記載したSet-MsolDomainAuthenticationコマンドを実行します。

```powershell:実行コマンド(オプション指定)
$dom="フェデレーション設定を有効にするドメイン名"
$url="http://【OpenAMサーバホスト名】:8080/openam/SSOPOST/metaAlias/idp"
$cert="証明書の鍵情報(中身)"
$ecp="https://【OpenAMサーバホスト名】:8080/openam/SSOSoap/metaAlias/idp"
$logout = "http://【OpenAMサーバホスト名】:8080/openam/IDPSloRedirect/metaAlias/idp"
```
以下のコマンドでフェデレーション設定が有効になっていることを確認します。

```powershell:フェデレーション有効確認
Get-MsolDomain
```

実行結果として以下のように「Authentication」の値に「Federated」が出力されるようになればOKです。

```powershell:実行結果
Name                                 Status   Authentication
----                                 ------   --------------
xxxx.xxxx.info(独自ドメイン)          Verified Federated
xxxx.onmicrosoft.com                 Verified Managed
```

## Office365ユーザーの登録
ここまででOffice365とOpenAMのフェデレーション有効化が完了したため、あとはOpenAMに作成したユーザーとマッピングするためのOffice365ユーザーを作成してやればOKです。

以下のコマンドでOffice365にユーザーを作成することが出来ます。

```powershell:ユーザー登録
New-MsolUser -UserPrincipalName 【作成するユーザーのUPN】-ImmutableId 【OpenAM上の社員番号】 -DisplayName 【任意の値】 -FirstName 【任意の値】-LastName 【任意の値】-AlternateEmailAddresses 【ユーザーのメールアドレス】-UsageLocation "JP"
```

## ログイン確認
最後に作成したユーザーでSSOが有効になるかを確認します。

<img width="271" alt="365Login.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/138274/8c27a812-31de-1be7-6044-460c1c0f7d44.png">

ログイン画面が切り替わります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/d91fe099-d764-a084-dcf3-1b615dbba0ba.png)

切り替わった後にOpenAMのログイン画面が表示されるので、マッピングしたユーザーのアカウント情報(UPN)とパスワードを入力します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/b16cf822-18ad-13f1-b328-4b8db582207c.png)