【SAMLSSO】SAMLResponseの中身はIdP次第で一部異なる場合がある
jp
今回はSAMLSSO(シングルサインオン)時のIdP(Identity Provider)について1点共有したいと思います。
複数のIdPに対応する必要があり得る
とあるアプリケーションで外部IDaaSを前提としたSSOが有効化されている場合、
そのIdPとして以下のように様々なクラウドサービスを利用できます。
- CloudGate UNO
- Okta
- AzureAD
- OneLogin
- Auth0
etc...
この際、そのアプリケーションを利用するテナントごとに異なるIdPが利用される可能性があります。
IdP次第でSAMLResponseの中身が一部異なる可能性がある
SAMLSSOを開始すると、IdPからSAMLResponseが返されます。
この際、利用するIdP次第でSAMLResponseの中身が一部異なる場合があります。
例えば、同内容のSAMLRequestをOneLoginとAuth0に渡した場合、
SAMLResponseのNameID要素はそれぞれ以下のようになります。
OneLogin
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">example@example.com</saml:NameID>
Auth0
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">auth0|7eha60c21bc1ac0k1778a251</saml:NameID>
- Oneloginはユーザーのメールアドレス
- Auth0はuser_id
が入っています。
IdP次第で個別の対応が必要
仮にSAMLResponseからユーザーのメールアドレスを取得したい場合、
利用するIdP次第で個別の対応が必要になります。
今回のケースの解決法としては、
- SAMLRequestでSAMLResponseのNameID要素の値を指定する
- IdP側でSAMLResponseのNameID要素の値を設定する
- SAMLResponse内の別要素(例えばAttribute要素)から値を取得する
といった手段が考えられます。
まとめ
SAMLResponseの中身はIdP次第で一部異なる場合があります。
複数のIdPにSAMLSSO対応する際には注意が必要です。
AUTHOR