2016年12月10日土曜日

GoogleアカウントでOffice365(Azure AD)にSSOログイン

自分の団体のログイン環境をGoogleアカウントに全部にまとめたくて、Office365もGoogleアカウントでSSOログインできるようにしようと思ったら思ったより苦戦した話。

とりあえず情報があまりない。Azure ADをIdP、GoogleがSPとしてSSOは沢山あるんだけど、逆がなかなか見つからない。

大まかな流れはGoogleさんのヘルプ
Office 365 クラウド アプリケーション
を読めば出来そうな気がするが、Azure ADと連携する上で必要な肝心な項目が省略されている。これに補足する形でメモしておく。

PowerShellコマンドなどは
http://www.viewds.com/blog/making-office-365-work-with-an-external-saml-identity-provider.html
も参考に。

第1部 Office 365 を SAML 2.0 のサービス プロバイダ(SP)として設定する

5.オンプレミスの Active Directory と Azure Active Directory との連携(フェデレーション)を設定します。

6.IdP 証明書を設定し、連携している Active Directory ドメインで Active Directory PowerShell を使って URL を設定します。

簡単にできそうに書いてあるが、情報はあまりない。5と6は同時に設定することになる。

とりあえず、Azure ADをPowerShellで操作する必要があるので、
https://msdn.microsoft.com/ja-jp/library/jj151815.aspx
ここに書かれているとおり、 Microsoft Online Services Sign-In AssistantAzure Active Directory Module for Windows PowerShellをインストールする。

PowerShellを開いて
>Connect-MsolService
でAzure ADに接続する。

ここで、SSO連携したいADドメインをフェデレーションモード(認証連携モード)にするために
>Set-MsolDomainAuthentication
コマンドを使うが、
-PassiveLogOnUri
-ActiveLogOnUri
-LogOffUri
-IssuerUri
の4つの引数が何を指し示すかの情報は特にない。

IssuerUriはGoogle IdP メタデータの中の"https://accounts.google.com/o/saml2?idpid="、その他3つは"https://accounts.google.com/o/saml2/idp?idpid="の形のURIで良さそうだ。certはメタデータの中の鍵っぽい文字列を改行やスペースを入れずに入力する。改行やスペースが入っているとエラー出る。

これで第1部は完了。

第2部 事前構成済みの Office 365 クラウド アプリケーションで G Suite を SAML ID プロバイダ(IdP)として設定する

5.[サービス プロバイダの設定] の情報を収集するには、次の 2 つの方法があります。[エンティティ ID] と [シングル サインオン URL] 欄の値をコピーして [X.509 証明書] をダウンロードし、適切な [サービス プロバイダの設定] 欄に貼り付けてから [次へ] をクリックします。または [IDP メタデータ] をダウンロードし、適切な [サービス プロバイダの設定] 欄にアップロードしてから、管理コンソールに戻って [次へ] をクリックします。
ここで出てくる『適切な [サービス プロバイダの設定] 欄』というものは存在しない。第1部のSet-MsolDomainAuthenticationで設定したURIがそれにあたるようだ。なのでこの5は無視して良い。

第3部 Google の管理コンソールで Office 365 固有のサービス プロバイダの詳細を入力する

3. [名前 ID] は、[ImmutableID] で設定されている要件を満たす必要があります。これを設定するには Active Directory の同期ツールを使います。複数の値の入力はサポートされていません。
名前IDには「メールアドレス」「名」「姓」しか選ばせてくれないので、メールアドレスに設定するしかない。そして、Azure ADユーザーのImmutableIDもメールアドレスに変更する以外に道がない。変更方法は下記のヘルプ参照してみると

  フェデレーションを利用しているユーザーが Office アプリのアクティブ化を試みると、"No credentials" エラーが表示される

ADドメインを一度Managedモードに戻して、そこで変更する必要があるらしい。
>Set-MsolDomainAuthentication -DomainName ドメイン -Authentication Managed
でモード変更
>Set-MsolUserPrincipalName -UserPrincipalName user@contoso.com -ImmutableID user@contoso.com -NewUserPrincipalName user@contoso.com
みたいな感じでImmutableIDをメールアドレスに変更。上記ヘルプには-NewUserPrincipalNameが書いてないが、必須項目である。

ImmutableIDを変更したら第1部のSet-MsolUserPrincipalNameでフェデレーションモードに戻す。引数も全部入力する必要がある気がする。


あとはGoogleのヘルプ通りで大丈夫なはず。初めてのSSO連携だったけどこんなに手こずるとは。immutableIDを変更するのはImmutableじゃない感じがして悲しいです。