pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

OpenAMとO365のSAML連携

環境

CentOS7
OpenAM14

※セットアップはカスタムセットアップで実施
 手順 4: ユーザーデータストア設定
 上記のみ"OpenAM のユーザーデータストア"を選択。他はデフォルト。

手順

①OpenAMインスト

以下を参考
OpenAM 14を最速で構築する10分間クッキング - Qiita
※初期設定からやり直す場合は、以下ディレクトリを削除
 /usr/share/tomcat/openam/

②OpenAM設定

以下を参考
【仕事メモ】OpenAM(Ver13) Office365との認証連携(1) - Qiita
【仕事メモ】OpenAM(Ver13) Office365との認証連携(2) - Qiita

※パスワード符号化は以下URLで行う
 https://SERVER_URL/openam/encode.jsp

※キーストア設定画面で、"Keystore Type"はJKSを指定。

※レルムは新規に作成。レルムを作成した時のMetadataURLは以下
 [ServerURL]/saml2/jsp/exportmetadata.jsp?entityid=[entityID]&realm=/realmname
 参考
 How do I export and import SAML2 metadata in AM (All versions)? - Knowledge - BackStage

 例) レルムがo365、ServerURLがhoge.comの場合
 https://hoge.com/openam/saml2/jsp/exportmetadata.jsp?entityid=https%3A%2F%2Fhoge.com%3A443%2Fopenam&realm=/o365

※O365のメタデータファイルは、Extensionsタグも削除する。削除しない場合、以下エラーとなる。
 Unexpected element {urn:oasis:names:tc:SAML:2.0:metadata}:Extensions
 O365メタデータが規約に準拠してない為と想定される。Extensionsタグの順番がおかしい。
 https://www.oasis-open.org/committees/download.php/51890/SAML%20MD%20simplified%20overview.pdf
 


⭐️超重要⭐️
参考URLの"エンティティプロバイダの設定変更"→"NameID の書式リスト"に以下設定をしてるが、誤りと想定される。
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent=employeeNumber
正しくは、"NameID値マップ"と想定される。(後述)


NameIDはSAML認証において、認証対象のユーザーを特定するもの。
SAMLレスポンスのNameIDタグの値になる。
O365と連携する場合、この値がO365上のユーザー属性であるImmutableIDと合致する必要がある。
NameIDのフォーマットは複数あり、どれを利用するか?は、SAMLレスポンスのNameIDタグのFormat属性で指定される。IdP・SP双方が対応してるフォーマットである必要あり。
O365の場合は、以下フォーマットを指定する必要あり。
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
"NameID値マップ"機能で、データストア(LDAP)にある任意のユーザー属性をNameIDに指定する事ができる。今回の例ではurn:oasis:names:tc:SAML:2.0:nameid-format:persistent=employeeNumber。


上記の前提を踏まえ、O365とSAML連携する時のOpenAM側の設定は2種類ある。
1) NameID 値マップ機能でデータストアの任意のユーザー属性をNameIDにする。今回の例ではemployeeNumber。
2) データストアに以下属性を登録する。
sun-fm-saml2-nameid-infokey
sun-fm-saml2-nameid-info
値の指定方法は以下URLを参照。この属性の値にNameIDの値を格納する。
https://backstage.forgerock.com/knowledge/kb/article/a83620834


1)の方がシンプルな実装。2)はデータストアに事前に値の格納が必要になる。
1)の方法を採用する場合、SP側のエンティティプロバイダ設定で、"Disable NameID Persistence"にチェックを付ける必要あり。
付けないとIdP Initiated SSOでサインイン成功した場合に、データストアに2)の2属性が書き込まれる為。
※SP Initiated SSOの場合は認証エラーになる。
この動作になる理由は、NameIDフォーマットで指定したpersistentの仕様。
詳細は以下URLを参照。
SAML ~ NameID Format をご紹介 ~ - Qiita



⭐️おまけ⭐️
OpenAMに"NameID値マップ"機能と似た機能で、"属性マッパー"という機能もあり。
これは、NameID値マップと同様に、SAMLパラメタの値を書き換える機能だが、対象がNameIDの属性でなく、SAMLレスポンスに含まれるAttiributeタグの中の属性値を書き換える機能。今回のケースだと
IDPEmail=mail
上記値を設定してるが、理由はO365がAttributeタグにIDPEmail属性を仕様として要求してる為。
属性マッパーを設定することで、SAMLレスポンスのAttributeタグにIDPEmailの属性を追加できる。値はデータストアの該当ユーザーのメールアドレス情報が設定される。

③O365設定 & ユーザー登録

以下を参考
【仕事メモ】OpenAM(Ver13) Office365との認証連携(3) - Qiita

※O365とのフェデレーション設定では以下が要求される。
 AzureADのSAML連携メモ - pikesaku’s blog

PowerShell実行環境がWinSrv2016の場合、AzureADモジュールインスト前に以下対応が必要
 You are being redirected...
 PowerShellで以下コマンドを実行

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

ドメインのフェデレーション設定のPowerShellコマンドは以下を参照
 Azure AD Connect:シングル サインオンに SAML 2.0 ID プロバイダーを使用する - Azure | Microsoft Docs
 Set-MsolDomainAuthentication | Microsoft Docs

※ set-MsolDomainAuthenticationコマンドの一部オプションの意味は以下の通り。(上記URLより説明文を引用)  

パラメタ 意味
PassiveLogOnUri The URL that web-based clients will be directed to when signing in to Office 365.
ActiveLogOnUri A URL that specifies the end point used by active clients when authenticating with domains set up for single sign-on (also known as identity federation) in Microsoft Office 365.
IssuerUri The unique identifier of the domain in the Office 365 identity platform derived from the federation server.
LogOffUri The URL clients are redirected to when they sign out of Office 365.

※O365とのフェデレーション設定ではIssuerに設定する値は、ユニーク(他O365テナントで登録済みだとNG)でないとset-MsolDomainAuthenticationコマンドがエラーになる。これでGW1日無駄にした。泣いてしまいそう。。。。

Set-MsolDomainAuthentication : Unable to complete this action. Try again later.
At line:1 char:1
+ Set-MsolDomainAuthentication -DomainName $dom -FederationBrandName $B ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [Set-MsolDomainAuthentication], MicrosoftOnlineException
    + FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.InternalServiceException,Microsoft.Online.Adm
   inistration.Automation.SetDomainAuthentication

 Set-MsolDomainAuthentication fails when trying to set a domain as federated

④動作確認

IdP InitiatedとSP Initiatedの両方の動きを確認する。
詳細は以下記事を参照。
OpenAMとO365のSAML連携(動作確認) - pikesaku’s blog