【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
jp
jp
記事URLをコピーしました