複数のEntra IDをIdPとして、SPから利用する場合、SP側でマルチIdP対応は必要か

前提

・Entra ID テナントは2つ(テナントA、テナントB)

・SPへのログインは、Entra IDをIdPとしてSAML認証をしたい

・SPを利用させようとするユーザは、テナントA、テナントBに存在する

この前提において、通常は、SP側のロジックを作り、認証のためにリダイレクトさせるEntra IDテナントURLを指定する必要があります(マルチIdP対応が必要)。

SP側がマルチIdPに対応している作りになっていればよいですが、そうでない場合、SP側をマルチIdP対応させるために改修が必要となります。

そのような回収をせずに、”前提”を実現する方法はあるのでしょうか

Entra IDに認証させるためにリダイレクトさせるEntra IDのURL(SAML エンドポイント)について、テナントIDに依存しないURLを利用することは可能か

Microsoft Entra ID の SAML エンドポイントは、各テナントに固有のURLとなっており、共通の認証エンドポイントを通じて、ユーザーに応じたテナントを自動的に切り替えることはできません。

★通常のEntra IDログイン画面(ログインURL)はテナントに依存せず、ユーザにより入力されるUPNによりテナントが識別されますが、SAMLエンドポイントとして、EntraIDログイン画面を利用する場合は、テナント固有のURLを利用する必要があります。

B2B招待によりIdPを一本化することは可能(代替案)

SP 側がマルチ IdP に対応していない場合には、いずれか一方のテナントに他方のユーザーを B2B 招待し、IdP を一本化する構成をとることが可能です。

ゲストユーザーの SAML 認証の流れとしては、通常以下の通りです。
・SP → 招待されたテナント (リソース テナント) → ゲスト ユーザーのホームテナント

そのため、SP 側はリソース テナントを IdP として扱い、SP 側で複数の IdP を意識する必要はありません。

また、ゲスト ユーザーで SAML 認証を実施する場合の一般的な注意点として、SAML レスポンスのクレームにuser.userprincipalname が設定される場合には、#EXT# の形式の UPN ではなくホームテナント側の UPN が使用されまます(招待されたテナントの user#EXT#@contoso.onmicrosoft.com ではなく、ホーム テナント側の user@*** が使用されます。)
下記の公開資料です。

~~~ 抜粋 ~~~
B2B ユーザーの UPN 要求の動作
UPN 値をアプリケーション トークン要求として発行する必要がある場合は、B2B ユーザーに対して実際の要求マッピングの動作が異なる場合があります。 B2B ユーザーが外部の Microsoft Entra ID で認証を行い、ソース属性として user.userprincipalname を発行すると、Microsoft Entra ID はこのユーザーのホーム テナントから UPN 属性を発行します。

要求としてを使用する場合、SAML/WS-Fed、Google、電子メール ワンタイム パスコード (OTP) など、user.userprincipalnameについて、システムはユーザーの電子メール アドレスではなく UPN を発行します。 すべての B2B ユーザーのトークン要求で実際の UPN を発行する場合は、代わりにソース属性として user.localuserprincipalname 設定します。

– Microsoft Entra 外部 ID での B2B コラボレーション ユーザー要求マッピング
<https://learn.microsoft.com/ja-jp/entra/external-id/claims-mapping#upn-claims-behavior-for-b2b-users>
~~~~~~~~~~

その他

マルチIdP対応している場合、SP側とEntra ID側でUPNを2回入力する手間を省略する方法はあるか

マルチIdPを実現する方法として、SP側で、ユーザ名(EntraユーザのUPN)を入力させて、その値(UPNサフィックス)に応じて、リダイレクトさせる先のEntra IDのURL(SAML エンドポイント)を変化させる方法が考えられますが、リダイレクトさせたEntra ID でも再度ユーザ名(EntraユーザのUPN)は入力させるのは、ユーザ利便性が低いです。

回避方法

以下公開情報記載の SAMLリクエストに login_hint を含める方法があります。

~~~ 抜粋 ~~~
パラメーター値としてサブジェクトの NameID を使用して、シングル サインオン URL に login_hint パラメーターを HTTP 要求に追加することで、サブジェクトを指定できます。

– シングル サインオン SAML プロトコル
<https://learn.microsoft.com/ja-jp/entra/identity-platform/single-sign-on-saml-protocol#subject>
~~~~~~~~~~

これによりどのアカウントで認証するかをEntra IDは判断することができます。具体的には SP から Microsoft Entra ID にリダイレクトするときの URL が以下のようになります。
login.microsoftonline.com/【テナント ID】/saml2?SAMLRequest=【SAML リクエスト】&login_hint=【サインインするユーザーの UPN】