Azure Active Directory B2C でカスタム ポリシーを使用して AD FS を OpenID Connect プロバイダーとして追加する
"開始する前に"、[ポリシーの種類の選択] セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。
前提条件
- ユーザー フローを作成して、ユーザーがアプリケーションにサインアップおよびサインインできるようにします。
- Web アプリケーションを登録します。
- 「Active Directory B2C でのカスタム ポリシーの概要」にある手順を完了します。
- Web アプリケーションを登録します。
AD FS アプリケーションを作成する
Azure Active Directory B2C (Azure AD B2C) で AD FS アカウントを持つユーザーのサインインを有効にするには、AD FS でアプリケーション グループを作成する必要があります。 詳細については、「AD FS 2016 以降で OpenID Connect を使用する Web アプリケーションを構築する」を参照してください
アプリケーション グループを作成するには、以下の手順に従います。
- [サーバー マネージャー] で [ツール] を選択してから、 [AD FS の管理] を選択します。
- [AD FS の管理] で、 [アプリケーション グループ] を右クリックし、 [アプリケーション グループの追加] を選択します。
- アプリケーション グループ ウィザードの [ようこそ] 画面で、以下を実行します。
- アプリケーションの [名前] を入力します。 たとえば、「Azure AD B2C application」とします。
- [クライアント/サーバー アプリケーション] で、 [Web アプリケーション テンプレートにアクセスする Web ブラウザー] テンプレートを選択します。
- [次へ] を選択します。
- アプリケーション グループ ウィザードの [ネイティブ アプリケーション] 画面で、以下を実行します。
- [クライアント識別子] の値をコピーします。 クライアント識別子は、お使いの AD FS アプリケーションの ID です。 アプリケーション ID は、この記事の後の方で必要になります。
- [リダイレクト URI] に「
https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/oauth2/authresp
」と入力し、[追加] をクリックします。 カスタム ドメインを使用する場合は、「https://your-domain-name/your-tenant-name.onmicrosoft.com/oauth2/authresp
」と入力します。your-tenant-name
を実際のテナントの名前に、your-domain-name
を実際のカスタム ドメインに置き換えます。 - [次へ]、[次へ] の順に選択し、再度 [次へ] を選択して、アプリ登録ウィザードを完了します。
- [閉じる] を選択します。
アプリ要求を構成する
この手順では、AD FS アプリケーションから Azure AD B2C に返される要求を構成します。
[アプリケーション グループ] で、作成したアプリケーションを選択します。
アプリケーションのプロパティ ウィンドウの [アプリケーション] で、 [Web アプリケーション] を選択します。 次に、 [編集] を選択します。
[発行の変換規則] タブを選択してから、 [規則の追加] を選択します。
[要求規則テンプレート] で、[LDAP 属性を要求として送信] を選択し、[次へ] を選択します。
[要求規則名] を指定します。 [属性ストア]で、[Active Directory] を選択し、以下の要求を追加します。
LDAP 属性 出力方向の要求の種類 User-Principal-Name upn Surname family_name Given-Name given_name Display-Name name [出力方向の要求の種類] ドロップダウンには、一部の名前が表示されないことに注意してください。 手動で入力する必要があります (ドロップダウンは編集可能です)。
[完了] を選択します。
[Apply](適用)、[OK] の順に選択します。
[OK] を再度選択して作業を終了します。
AD FS を ID プロバイダーとして構成する
Azure AD B2C テナントの全体管理者として Azure Portal にサインインします。
複数のテナントへのアクセス権をお持ちの場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
Azure portal の左上隅にある [すべてのサービス] を選択してから、 [Azure AD B2C] を検索して選択します。
[ID プロバイダー] を選択してから、 [新しい OpenID Connect プロバイダー ] を選択します。
[名前] を入力します。 たとえば、Contoso です。
[メタデータ URL] には、AD FS OpenID Connect 構成ドキュメントの URL を入力してください。 次に例を示します。
https://adfs.contoso.com/adfs/.well-known/openid-configuration
[クライアント ID] には、前に記録したアプリケーション ID を入力します。
[スコープ] で、
openid
を入力します。[応答の種類] で、 [id_token] を選択します。 そのため、[クライアント シークレット] の値は必要ありません。 汎用 OpenID Connect ID プロバイダーを追加する際のクライアント ID とシークレットの使用についてご覧ください。
(省略可能) [ドメインのヒント] に、「
contoso.com
」と入力します。 詳しくは、「Azure Active Directory B2C を使用した直接サインインの設定」をご覧ください。[ID プロバイダー要求のマッピング] で、次の要求を入力します。
- ユーザー ID:
upn
- 表示名:
unique_name
- 名:
given_name
- 姓:
family_name
- ユーザー ID:
[保存] を選択します。
ユーザー フローに AD FS ID プロバイダーを追加する
この時点では、AD FS (Contoso) ID プロバイダーは設定されていますが、どのサインイン ページでも、まだ使用できません。 AD FS ID プロバイダーをユーザー フローに追加するには、次のようにします。
- Azure AD B2C テナントで、 [ユーザー フロー] を選択します。
- AD FS ID プロバイダー (Contoso) を追加するユーザー フローを選択します。
- [ソーシャル ID プロバイダー] から [Contoso] を選択します。
- [保存] を選択します。
- ポリシーをテストするには、 [ユーザー フローを実行します] を選択します。
- [アプリケーション] には、以前に登録した testapp1 という名前の Web アプリケーションを選択します。 [応答 URL] に
https://jwt.ms
と表示されます。 - [ユーザー フローを実行します] ボタンを選択します。
- サインアップまたはサインイン ページで、 [Contoso] を選択して Contoso アカウントでサインインします。
サインイン プロセスが成功すると、ブラウザーは https://jwt.ms
にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。
AD FS を ID プロバイダーとして構成する
ユーザーが AD FS アカウントを使用してサインインできるようにするには、AD FS を、Azure AD B2C がエンドポイント経由で通信できる相手のクレーム プロバイダーとして定義する必要があります。
TrustFrameworkExtensions.xml を開きます。
ClaimsProviders 要素を見つけます。 存在しない場合は、それをルート要素の下に追加します。
新しい ClaimsProvider を次のように追加します。
<ClaimsProvider> <Domain>contoso.com</Domain> <DisplayName>Contoso</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="Contoso-OpenIdConnect"> <DisplayName>Contoso</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="METADATA">https://your-adfs-domain/adfs/.well-known/openid-configuration</Item> <Item Key="response_types">id_token</Item> <Item Key="response_mode">form_post</Item> <Item Key="scope">openid</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">0</Item> <!-- Update the Client ID below to the Application ID --> <Item Key="client_id">Your AD FS application ID</Item> </Metadata> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="upn" /> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" /> <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="unique_name" /> <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" /> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" /> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" /> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
[メタデータ URL] には、AD FS OpenID Connect 構成ドキュメントの URL を入力します。 次に例を示します。
https://adfs.contoso.com/adfs/.well-known/openid-configuration
client_id を、アプリケーションの登録で取得したアプリケーション ID に設定します。
ファイルを保存します。
ユーザー体験を追加する
この時点では、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="ContosoExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="Contoso-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
と表示されます。 - [今すぐ実行] ボタンを選択します。
- サインアップまたはサインイン ページで、 [Contoso] を選択し、Contoso アカウントでサインインします。
サインイン プロセスが成功すると、ブラウザーは https://jwt.ms
にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。
次のステップ
AD FS トークンをアプリケーションに渡す方法を確認します。