Azure Active Directory B2C のカスタム ポリシーを使ってマルチテナント Microsoft Entra ID のサインインを設定する
開始する前に、[ポリシーの種類の選択] セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。
この機能は、カスタム ポリシーでのみ使用できます。 セットアップ手順は、前のセレクターで [カスタム ポリシー] を選択します。
この記事では、Microsoft Entra ID のマルチテナント エンドポイントを使ってユーザーのサインインを有効にする方法について説明します。 テナントごとに ID プロバイダーを構成しなくても、複数の Microsoft Entra テナントのユーザーが Azure AD B2C を使ってサインインできるようになります。 ただし、これらのテナントのいずれのゲスト メンバーもサインインはできません。 そのため、各テナントを個別に構成する必要があります。
前提条件
- ユーザー フローを作成して、ユーザーがアプリケーションにサインアップおよびサインインできるようにします。
- Web アプリケーションを登録します。
- 「Active Directory B2C でのカスタム ポリシーの概要」にある手順を完了します。
- Web アプリケーションを登録します。
注意
この記事では、前提条件で述べる前のステップで SocialAndLocalAccounts スターター パックを使用することを想定しています。
Microsoft Entra アプリを登録する
Azure Active Directory B2C (Azure AD B2C) で Microsoft Entra アカウントを持つユーザーのサインインを有効にするには、Azure portal でアプリケーションを作成する必要があります。 詳細については、Microsoft ID プラットフォームにアプリケーションを登録する方法に関するページを参照してください。
Azure portal にサインインします。
複数のテナントにアクセスできる場合は、上部のメニュー内の設定アイコンを選択し、[ディレクトリとサブスクリプション] メニューから、ご利用の Microsoft Entra ID テナントに切り替えます。
Azure portal の左上隅にある [すべてのサービス] を選択し、 [アプリの登録] を検索して選択します。
[新規登録] を選択します。
アプリケーションの [名前] を入力します。 たとえば、
Azure AD B2C App
のようにします。このアプリケーションに [任意の組織ディレクトリ内のアカウント (任意の Microsoft Entra ディレクトリ - マルチテナント)] を選びます。
[リダイレクト URL] では、値 [Web] をそのまま使用し、次の URL をすべて小文字で入力します。
your-B2C-tenant-name
は、お使いの Azure AD B2C テナントの名前に置き換えます。https://your-B2C-tenant-name.b2clogin.com/your-B2C-tenant-name.onmicrosoft.com/oauth2/authresp
たとえば、「
https://fabrikam.b2clogin.com/fabrikam.onmicrosoft.com/oauth2/authresp
」のように入力します。カスタム ドメインを使用する場合は、「
https://your-domain-name/your-tenant-name.onmicrosoft.com/oauth2/authresp
」と入力します。your-domain-name
を実際のカスタム ドメインに、your-tenant-name
を実際のテナントの名前に置き換えます。[登録] を選択します。 後の手順で使用するために、アプリケーション (クライアント) ID を記録しておきます。
[証明書とシークレット] を選択してから、[新しいクライアント シークレット] を選択します。
シークレットの説明を入力し、有効期限を選択して、 [追加] を選択します。 後の手順で使用するために、シークレットの値を記録しておきます。
省略可能な要求の構成
Microsoft Entra ID から family_name
および given_name
要求を取得する場合は、Azure portal UI またはアプリケーション マニフェストでアプリケーションの省略可能な要求を構成できます。 詳細については、Microsoft Entra アプリに省略可能な要求を提供する方法に関するページを参照してください。
- Azure portal にサインインします。 Microsoft Entra ID を検索して選択します。
- [管理] セクションで、 [アプリの登録] を選択します。
- 省略可能な要求を構成するアプリケーションを一覧から選択します。
- [管理] セクションで、 [トークン構成] を選択します。
- [省略可能な要求を追加] を選択します。
- [トークンの種類] で、 [ID] を選択します。
- 追加する省略可能な要求 (
family_name
とgiven_name
) を選択します。 - [追加] を選択します。 [Microsoft Graph 電子メールのアクセス許可を有効にします (要求がトークンに表示されるために必要)] が表示される場合は、それを有効にしてから再度 [追加] を選択します。
[省略可能] アプリの信頼性を確認する
発行元の確認により、ユーザーは、登録したアプリの信頼性を把握できます。 検証済みアプリは、アプリの発行元が、Microsoft Partner Network (MPN) を使用して ID を検証したことを意味します。 アプリを発行者確認済みとしてマークする方法についてご確認ください。
ポリシー キーを作成する
作成したアプリケーション キーを Azure AD B2C テナントに格納する必要があります。
- 複数のテナントにアクセスできる場合は、上部のメニュー内の設定アイコンを選択し、[ディレクトリとサブスクリプション] メニューから、ご利用の Azure AD B2C テナントに切り替えます。
- Azure portal の左上隅にある [すべてのサービス] を選択してから、 [Azure AD B2C] を検索して選択します。
- [ポリシー] で [Identity Experience Framework] を選択します。
- [ポリシー キー] を選択し、 [追加] を選択します。
- オプションについては、
Manual
を選択します。 - ポリシー キーの名前を入力します。 たとえば、「
AADAppSecret
」のように入力します。 作成時に、プレフィックスB2C_1A_
がキーの名前に自動的に追加されるため、次のセクションの XML での参照は B2C_1A_AADAppSecret になります。 - [シークレット] に、前に記録したクライアント シークレットを入力します。
- [キー使用法] として [
Signature
] を選択します。 - [作成] を選択します
Microsoft Entra ID を ID プロバイダーとして構成する
ユーザーが Microsoft Entra アカウントを使用してサインインできるようにするには、Microsoft Entra ID を Azure AD B2C がエンドポイント経由で通信できるクレーム プロバイダーとして定義する必要があります。 エンドポイントは、特定のユーザーが認証されていることを確認するために Azure AD B2C で使う一連の要求を提供します。
ポリシーの拡張ファイル内で Microsoft Entra ID を ClaimsProvider 要素に追加することで、Microsoft Entra ID をクレーム プロバイダーとして定義できます。
SocialAndLocalAccounts/TrustFrameworkExtensions.xmlファイルを開きます (前提条件で使用したファイルを参照してください)。
ClaimsProviders 要素を見つけます。 存在しない場合は、それをルート要素の下に追加します。
新しい ClaimsProvider を次のように追加します。
<ClaimsProvider> <Domain>commonaad</Domain> <DisplayName>Common AAD</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="AADCommon-OpenIdConnect"> <DisplayName>Multi-Tenant AAD</DisplayName> <Description>Login with your Contoso account</Description> <Protocol Name="OpenIdConnect"/> <Metadata> <Item Key="METADATA">https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration</Item> <!-- Update the Client ID below to the Application ID --> <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid profile</Item> <Item Key="response_mode">form_post</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> <Item Key="DiscoverMetadataByTokenIssuer">true</Item> <!-- The key below allows you to specify each of the Azure AD tenants that can be used to sign in. Update the GUIDs below for each tenant. --> <Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000,https://login.microsoftonline.com/11111111-1111-1111-1111-111111111111</Item> <!-- The commented key below specifies that users from any tenant can sign-in. Uncomment if you would like anyone with an Azure AD account to be able to sign in. --> <!-- <Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com/</Item> --> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_AADAppSecret"/> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" /> <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
ClaimsProvider 要素の下で、Domain の値を、他の ID プロバイダーと区別するために使用できる一意の値に更新します。
TechnicalProfile 要素の下で、DisplayName の値を更新します (例:
Multi-Tenant AAD
)。 この値は、サインイン ページのサインイン ボタン上に表示されます。client_id は、前に登録した Microsoft Entra マルチテナント アプリケーションのアプリケーション ID に設定します。
CryptographicKeys で、StorageReferenceId の値を、前に作成したポリシー キーの名前に更新します。 たとえば、「
B2C_1A_AADAppSecret
」のように入力します。
アクセスを制限する
ValidTokenIssuerPrefixes の値として https://login.microsoftonline.com/
を使うと、すべての Microsoft Entra ユーザーがアプリケーションにサインインできるようになります。 有効なトークン発行者の一覧を更新し、サインインできる Microsoft Entra テナント ユーザーの特定の一覧へのアクセスを制限します。
値を取得するには、サインインさせるユーザーの Microsoft Entra テナントごとに、OpenID Connect Discovery のメタデータを調べます。 メタデータの URL の形式は、https://login.microsoftonline.com/your-tenant/v2.0/.well-known/openid-configuration
のようになっています。your-tenant
は Microsoft Entra テナントの名前です。 次に例を示します。
https://login.microsoftonline.com/fabrikam.onmicrosoft.com/v2.0/.well-known/openid-configuration
サインインに使用する Microsoft Entra テナントごとに次の手順を実行します。
- ブラウザーを開き、そのテナントに対応する OpenID Connect のメタデータ URL に移動します。
issuer
オブジェクトを探し、その値を記録します。https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000/v2.0
のようになっていると思います。 - その値をコピーして ValidTokenIssuerPrefixes キーに貼り付けます。 複数の発行者は、コンマで区切ります。 前出の
ClaimsProvider
XML サンプルでは、発行者が 2 つ存在する例を確認できます。
ユーザー体験を追加する
この時点では、ID プロバイダーはセットアップされていますが、サインイン ページではまだ使用できません。 独自のカスタム ユーザー体験がない場合は、既存のテンプレート ユーザー体験の複製を作成してください。そうでない場合は、次の手順に進みます。
- スターター パックから TrustFrameworkBase.xml ファイルを開きます。
Id="SignUpOrSignIn"
を含む UserJourney 要素を見つけ、その内容全体をコピーします。- TrustFrameworkExtensions.xml を開き、UserJourneys 要素を見つけます。 要素が存在しない場合は追加します。
- コピーした UserJourney 要素の内容全体を UserJourneys 要素の子として貼り付けます。
- ユーザー体験の ID の名前を変更します。 たとえば、「
Id="CustomSignUpSignIn"
」のように入力します。
ユーザー体験に ID プロバイダーを追加する
これでユーザー体験ができたので、ユーザー体験に新しい ID プロバイダーを追加します。 最初にサインイン ボタンを追加してから、ボタンをアクションにリンクします。 アクションは、前に作成した技術プロファイルです。
ユーザー体験内で、
Type="CombinedSignInAndSignUp"
またはType="ClaimsProviderSelection"
を含むオーケストレーション ステップ要素を見つけます。 これは通常、最初のオーケストレーション ステップです。 ClaimsProviderSelections 要素には、ユーザーがサインインに使用できる ID プロバイダーの一覧が含まれています。 要素の順序により、ユーザーに表示されるサインイン ボタンの順序が制御されます。 ClaimsProviderSelection XML 要素を追加します。 TargetClaimsExchangeId の値をフレンドリ名に設定します。次のオーケストレーション ステップで、ClaimsExchange 要素を追加します。 ID を、ターゲットの要求交換 ID の値に設定します。TechnicalProfileReferenceId の値を、前に作成した技術プロファイルの ID に更新します。
次の XML は、ID プロバイダーを使用したユーザー体験の最初の 2 つのオーケストレーション ステップを示しています。
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
...
<ClaimsProviderSelection TargetClaimsExchangeId="AzureADCommonExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="AzureADCommonExchange" TechnicalProfileReferenceId="AADCommon-OpenIdConnect" />
</ClaimsExchanges>
</OrchestrationStep>
証明書利用者ポリシーを構成する
証明書利用者ポリシー (例 SignUpSignIn.xml) は、Azure AD B2C が実行されるユーザー体験を指定します。 証明書利用者内の DefaultUserJourney 要素を検索します。 ID プロバイダーを追加したユーザー体験 ID と一致するように ReferenceId を更新します。
次の例では、CustomSignUpSignIn
ユーザー体験について、ReferenceId を CustomSignUpSignIn
に設定しています。
<RelyingParty>
<DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
...
</RelyingParty>
カスタム ポリシーをアップロードする
- Azure portal にサインインします。
- ポータル ツール バーにある [ディレクトリ + サブスクリプション] アイコンを選択し、Azure AD B2C テナントを含むディレクトリを選択します。
- Azure portal で、 [Azure AD B2C] を検索して選択します。
- [ポリシー] で [Identity Experience Framework] を選択します。
- [カスタム ポリシーのアップロード] を選択し、変更した 2 つのポリシー ファイルを拡張ポリシー (
TrustFrameworkExtensions.xml
など)、証明書利用者ポリシー (SignUpSignIn.xml
など) の順序でアップロードします。
カスタム ポリシーのテスト
- 証明書利用者ポリシー (
B2C_1A_signup_signin
など) を選択します。 - [アプリケーション] には、前に登録した Web アプリケーションを選択します。 [応答 URL] に
https://jwt.ms
と表示されます。 - [今すぐ実行] ボタンを選択します。
- サインアップまたはサインイン ページで [Common Microsoft Entra ID] (共通の Microsoft Entra ID) を選び、Microsoft Entra アカウントでサインインします。
マルチテナントのサインイン機能をテストするために、別の Microsoft Entra テナントに存在するユーザーの資格情報を使って、最後の 2 つの手順を実行してください。 [今すぐ実行のエンドポイント] をコピーし、プライベート ブラウザー ウィンドウ (Google のシークレット モード、Microsoft Edge の InPrivate ウィンドウなど) で開きます。 プライベート ブラウザー ウィンドウで開くと、現在キャッシュされている Microsoft Entra の資格情報を使わずに、ユーザー体験を全体的にテストできます。
サインイン プロセスが成功すると、ブラウザーは https://jwt.ms
にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。
次のステップ
- Microsoft Entra トークンをアプリケーションに渡す方法を参照してください。
- Microsoft Entra マルチテナント フェデレーションのライブ デモと、Microsoft Entra アクセス トークンを渡す方法のライブ デモをご覧ください。