環境
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