[CentOS6][OpenAM10] SAML連携 - Office365


Create: 2014/04/19
LastUpdate: 2014/04/28
≪ メニューに戻る

[CentOS6][OpenAM10] SAML連携 - GoogleApps (mail)」では、GoogleAppsにSSOしました。
ここでは、同じ環境を使用して、Office365 にSSOするように設定を追加します。
Office365 は管理画面でシングルサインオンの設定ができないので、Office365のAPIを実行する環境を構築する必要があります。今回は、ユーザ端末(Windows8)に Office365 のAPI実行環境を作ります。

1.OpenAM の設定

1.1.Office365のSP作成


トラストサークル、IdPは、「 [CentOS6][OpenAM10] SAML連携 - GoogleApps (mail)」と同じものを使用します。
ここでは、Office365 を SP として登録します。
以下のURLにアクセスして、Office365 のメタデータをダウンロードしてファイルに保存します。
このメタデータをそのまま、OpenAMに登録するとエラーになるので、以下の赤字で示した<Signature>…</Signature>タグを削除します。
<?xml version="1.0" encoding="utf-8"?>
<EntityDescriptor ID="_0c0d1ca7-7292-4bc6-801c-f880f6098f4e" entityID="urn:federation:MicrosoftOnline" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:alg="urn:oasis:names:tc:SAML:metadata:algsupport">
  <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>rcOl9fpE+7tcQv4q7Vh7mXwSvSM=</DigestValue></Reference></SignedInfo><SignatureValue>EII78QyiwB6OT8+uXQWhfNHLlDgaDtNsJwGGvSWDT3lHoMLEaGjmQd0bNN2f3bzvyTdYjPR9orMaFMGkuVZh6Phi1uR8a3X6EAalBjbD9w+ZK32jNIR9YkCBz7xO+MUICwjHKSHbSk5XqkRewXIwktecPY4d8oSMdbQ0GCdwZAvVukA9UsHwS1keTh4UvqWuhei3ojZfWnhibk6JfFKARaaWONsSt/ZX1UreVCP/OfnSf/pTod+xuvmKjPIvneFxmw65zNGFArDhh3mNCLuHcCNfDwnIUC2UkDDS2VVqNrOeaTncm9Wk1GnAWoiEGKlShRdE9ov4Ncf9mDRbfRiF8w==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIDYDCCAkigAwIBAgIJAOCvEihsjTsuMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xMzExMjAxNzM2MDlaFw0xODExMTkxNzM2MDlaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMrs7vxkwIQadMlNQM0SdRTkmFYGW1YqTFBnTNkYuBIafG0KsPMR04wMmQZvKIeIv72e1XibMn+lpSP+X8e0sK4jdYkRm9D5YVtbs9Otbxz8ObMLh/eNxik5bJH68mZL4fFH5NaZs6Z+Wh9/3oxAdGJWWPPh2W7CUn0E2R2xgQIEHu6CdC4pgOh3F424o7eUVmsYczYl3rB3x3YO1Ko8op+0kUPAert1tC9pNIfQxy/IwtHYxJsmAToRyIzchx/QBN4W1PF0HDtCUY68BoDvXP2zYDXn3ZgWkE9kbWD5nOZ649CUfAwfh2bbb332Zm4uRfrcHwum02ommElQwnxzZHcCAwEAAaOBijCBhzAdBgNVHQ4EFgQUozLOIFnHM8PHKjRJ6jd+btiSGgMwWQYDVR0jBFIwUIAUozLOIFnHM8PHKjRJ6jd+btiSGgOhLaQrMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJAOCvEihsjTsuMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAkq5hgSB4GE131kHfA93QArphiIZ/P97gbzAJQ8DLYPiBxZN+cY0gKOiO0HFNUfw497l2JB+eSdZbjBb60fJm6A8kHDRwJHhnQ+tu6TljJspQASXmppTIfg/zWIMa54MxK3gzVl8UFXDP1kLO3Y3J6OxnO2cX5cECl8pqMH+jvQt3Jyka0edJ0BQ3+6+cu+NdXhjWFlgdJc2udX3K2eYMMNTmgsiJdYJGHBLzLtOwQIQSkPwdbFbQBHkspKbOfsYQgP2fXwhgtX6jQrx/E+W+8bybo8rV7KKHVNjU2ZVcLksc5wtnJVtyaWRwSXovAl8SuUhGr+J724nTIL0SB3g/zw==</X509Certificate></X509Data></KeyInfo></Signature>   <Extensions>
    <alg:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    <alg:SigningMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
  </Extensions>
  
  <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" WantAssertionsSigned="true">
    <KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
~省略~
OpenAM管理画面 > [共通タスク] をクリックすると下図の画面が表示されるので、[リモートサービスプロバイダを登録]をクリックします。



[レルム]を選択し、上記でファイルに保存したOffice365のメタデータをアップロードして、[設定]をクリックします。



下図の赤枠で示したのが、今回登録したOffice365のSPです。



1.2.IdPの設定変更


Office365ユーザとOpenAMユーザを社員番号(employeeNumber)で紐つけるように設定します。
OpenAM管理画面 > [連携] > [エンティティプロバイダ(IDP)] をクリックすると下図の画面が表示されます。
[NameID 値マップ] に "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent=employeeNumber" を追加します。



属性としてメールアドレス(UPN) を渡すように設定します。
OpenAM管理画面 > [連携] > [エンティティプロバイダ(IDP)] > [表明処理] をクリックすると下図の画面が表示されます。
"IDPEmail=mail" を追加します。
※ IDPEmail は Office365で指定された属性名なので他の名称は使用できません。



これで、OpenAMにログインしたユーザの社員番号とメールアドレスでSSOするようになります。

1.3.ユーザの変更


テスト用ユーザ(user01) のメールアドレスに Office365 のログインID(upn)を設定します。
OpenAM管理画面 > [アクセス制御] > [レルム(test01)] > [対象(user01)] をクリックすると、下図の画面が表示されるので、[メールアドレス]に "demo@blue21demo.tk" を入力し、[社員番号]に"12345"を入力して [保存] をクリックします。



2.OpenAMの情報収集


以下のURLにアクセスすると IdP のメタデータを表示します。
realm は[レルム名]、entityid は [IdPのエンティティ名] です。
  • http://exam01.example.com:8080/openam/saml2/jsp/exportmetadata.jsp?realm=/test01&entityid=http://exam01.example.com:8080/openam
ここに、Office365 のシングルサインオン設定時に必要な、証明書やURLが記載されているので、Office365設定時は、ここから設定値を取得するようにします。



3.Office365 の設定


Office365 の設定は、以下の準備が実施されていることを前提にして記載します。

3.1.Office365のAPI実行環境セットアップ


Office365 のシングルサインオンの設定は WindowsPowereShellから CUIで行うのですが、「IT プロフェッショナル 用 Microsoft Online Services サインイン アシスタント RTW」、「Windows Azure AD Module」 が必要になります。
以下のURLに、システム要件とダウンロード先、コマンドの使用方法などが記載されています。
今回は、ユーザ端末(Windows8)にインストールします。

(1) IT プロフェッショナル 用 Microsoft Online Services サインイン アシスタント RTWのインストール

以下のURLから「IT プロフェッショナル 用 Microsoft Online Services サインイン アシスタント RTW」をダウンロードしてインストールします。
ダウンロードしたファイルをクリックすると下図の画面が表示されるので、使用許諾契約書、プライバシーに関する声明の条項に同意する場合は、[インストール]をクリックします。



下図の画面が表示されたらインストール完了です。
[完了]をクリックします。



(2) Windows Azure AD Module のインストール

次に、以下のURLから「Windows Azure AD Module」ダウンロードしてインストールします。
ダウンロードしたファイルをクリックすると下図の画面が表示されます。
[次へ]をクリックします。



ライセンス条項に同意したら、[次へ]をクリックします。



[次へ]をクリックします。



[インストール]をクリックします。



[完了]をクリックします。



Office365設定時は、デスクトップの下図アイコンをダブルクリックして PowerShell を起動し、コマンドを実行します。



3.2.シングルサインオンの設定

(1) Office365 への接続

PowerShaell に $cred=Get-Credential を入力して ENTER します。
すると、Office365 のアカウント入力を要求されるので、管理者アカウントを入力します。



Connect-MsolService -Credential $cred を入力して ENTERします



(2) デフォルト・ドメインの確認

Get-MsolDomain を入力して ENTER します。
ドメインの一覧を見ることができます。[Authentication] が Managed の場合は、SSO用のドメインではないことを意味します。



デフォルト・ドメインのドメインは、SSOの設定ができないので、"blue21demo.onmicrosoft.com" をデフォルトドメインにします。
Office365管理画面で組織名をクリックします。



[規定のドメイン]を "blue21demo.onmicrosoft.com" に設定し、[保存]をクリックします。



(3) シングルサインオンの設定

PowerShell で以下のコマンドを実行します。
$MySigningCert には、上記2の<ds:x509certificate>に表示されている証明書を改行を除いて設定します。
  • $dom = "blue21demo.tk"
  • $uri = "http://exam01.example.com:8080/openam"
  • $LogOnUrl = "http://exam01.example.com:8080/openam/SSOPOST/metaAlias/test01/idp"
  • $LogOffUrl = "http://exam01.example.com:8080/openam/UI/Logout"
  • $MySigningCert = "<上記2参照>"
  • Set-MsolDomainAuthentication -DomainName $dom -FederationBrandName $dom -Authentication Federated -PassiveLogOnUri $LogOnUrl -SigningCertificate $MySigningCert -IssuerUri $uri -LogOffUri $LogOffUrl -PreferredAuthenticationProtocol SAMLP



Get-MsolDomain を実行してドメインを見てみます。
"blue21demo.tk" が Federated になっているので、SSO用ドメインに設定されたことを意味しています。



Get-MsolDomainFederationSettings -DomainName $dom を実行するとSSO設定の内容を表示できます。



SSO設定を修正したい場合は、以下のコマンドで、ドメインを Managed に戻してから再設定します。
  • Set-MsolDomainAuthentication -DomainName $dom -Authentication Managed

3.3.ユーザ作成


"blue21demo.tk" にユーザを作成します。
OpenAMユーザ(user01) のメールアドレスに設定した upn でユーザを作成します。
また、-ImmtableId にはOpenAMユーザ(user01)の社員番号を設定します。
以下のようにコマンドを実行します。
  • New-MsolUser -UserPrincipalName demo@blue21demo.tk -ImmutableId 12345 -DisplayName "demo" -FirstName Demo  -LastName User  -AlternateEmailAddresses "demo@blue21demo.tk" -UsageLocation "JP"



上記コマンドでは、Office365のライセンスが付与されないので、OpenAM管理画面でこのユーザにライセンスを付与します。
OpenAM管理画面 > [ユーザグループ] をクリックすると下図の画面が表示されるので、上記コマンドで登録した "demo" をクリックします。



ライセンスをチェックして、[保存]をクリックします。



4.動作確認


"EXAMPLE\user01" ユーザでユーザ端末にログインします。
下図は、リモートデスクトップでログインする場合の例です。



WindowsDesktopSSOの設定をしているので、WindowsにログインしたユーザでOpenAMは認証済みになります。
ブラウザで以下のOffice365のログイン画面にアクセスしてログインIDを入力します。
  • https://login.microsoftonline.com/login.srf



ログインIDを入力してENTERすると、ログインIDのドメイン名でSSO対象だと判断してSSOが実施されます。



SSOに成功すると下図のようにOffice365のユーザ画面が表示されます。



上記は、最初に Office365側にアクセスする SP Initiated SSO ですが、最初に OpenAM側のURLにアクセスする IdP Initiated SSO だとOffice365のログイン画面を表示しないのでログインIDの入力を省略できます。
IdP Initiated SSO のURLは以下のとおり。
  • http://exam01.example.com:8080/openam/saml2/jsp/idpSSOInit.jsp?metaAlias=/test01/idp&spEntityID=urn:federation:MicrosoftOnline&NameIDFormat=urn:oasis:names:tc:SAML:2.0:nameid-format:persistent