重要
2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください。
開始する前にこのページの上部にある ポリシーの種類 セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。
OpenID Connect は、OAuth 2.0 の上に構築された認証プロトコルであり、安全なユーザー サインインに使用できます。 このプロトコルを使用するほとんどの ID プロバイダーは、Azure AD B2C でサポートされています。
この記事では、カスタム OpenID Connect ID プロバイダーをユーザー フローに追加する方法について説明します。
重要
エンドポイントは、Azure AD B2C のセキュリティ要件に準拠している必要があります。 古い TLS バージョンと暗号は非推奨です。 詳細については、 Azure AD B2C TLS と暗号スイートの要件に関するページを参照してください。
[前提条件]
- ユーザーが サインアップしてアプリケーションにサインインできるように、ユーザー フローを作成します。
- Web アプリケーションを登録します。
- 「Active Directory B2C でのカスタム ポリシーの概要」の手順を完了してください。 このチュートリアルでは、Azure AD B2C テナント構成を使用するようにカスタム ポリシー ファイルを更新する方法について説明します。
- Web アプリケーションを登録します。
ID プロバイダーの追加
- 少なくとも外部 ID プロバイダー管理者特権を持つアカウントで Azure portal にサインインします。
- 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
- Azure portal の左上隅にある [ すべてのサービス ] を選択し、 Azure AD B2C を検索して選択します。
- [ID プロバイダー] を選択し、[新しい OpenID Connect プロバイダー] を選択します。
- 名前を入力します。 たとえば、「 Contoso」と入力します。
OpenId Connect ID プロバイダーを定義するには、ポリシーの拡張ファイルの ClaimsProviders 要素に追加します。
TrustFrameworkExtensions.xmlを開きます。
ClaimsProviders 要素を検索します。 存在しない場合は、ルート要素の下に追加します。
次のように新しい ClaimsProvider を追加します。
<ClaimsProvider> <Domain>contoso.com</Domain> <DisplayName>Login with Contoso</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="Contoso-OpenIdConnect"> <DisplayName>Contoso</DisplayName> <Description>Login with your Contoso account</Description> <Protocol Name="OpenIdConnect"/> <Metadata> <Item Key="METADATA">https://your-identity-provider.com/.well-known/openid-configuration</Item> <Item Key="client_id">00001111-aaaa-2222-bbbb-3333cccc4444</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> </Metadata> <!-- <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/> </CryptographicKeys> --> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/> <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" /> <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" /> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid"/> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
ID プロバイダーを構成する
すべての OpenID Connect ID プロバイダーは、サインインを実行するために必要なほとんどの情報を含むメタデータ ドキュメントを記述します。 メタデータ ドキュメントには、使用する URL やサービスの公開署名キーの場所などの情報が含まれています。 OpenID Connect メタデータ ドキュメントは常に、 .well-known/openid-configuration
で終わるエンドポイントにあります。 追加する OpenID Connect ID プロバイダーに、そのメタデータ URL を入力します。
[メタデータ URL] に、OpenID Connect メタデータ ドキュメントの URL を入力します。
<Item Key="METADATA">
技術プロファイルのメタデータに、OpenID Connect メタデータドキュメントの URL を入力します。
クライアント ID とシークレット
ユーザーがサインインできるようにするために、ID プロバイダーは開発者にサービスにアプリケーションを登録するように要求します。 このアプリケーションには、 クライアント ID と クライアント シークレットと呼ばれる ID があります。
クライアントシークレットはオプションです。 ただし、 レスポンスタイプ が code
の場合は、クライアントシークレットを指定する必要があります。これにより、シークレットを使用してトークンのコードが交換されます。
クライアント ID とクライアント シークレットを追加するには、これらの値を ID プロバイダーからコピーし、対応するフィールドに入力します。
<Item Key="client_id">
技術プロファイルのメタデータに、クライアント ID を入力します。
ポリシー キーを作成する
クライアント シークレットが必要な場合は、以前に記録したクライアント シークレットを Azure AD B2C テナントに格納します。
Azure portal にサインインします。
ご自分の Azure AD B2C テナントが含まれるディレクトリを必ず使用してください。 ポータル ツールバーで [ディレクトリ + サブスクリプション ] フィルターを選択します。
[ポータルの設定] | [Directories + subscriptions](ディレクトリ + サブスクリプション) ページの [ディレクトリ名] の一覧で自分の Azure AD B2C ディレクトリを見つけて、 [切り替え] を選択します。
Azure portal の左上隅にある [すべてのサービス] を選択してから、[Azure AD B2C] を検索して選択します。
[概要] ページで、[Identity Experience Framework] を選びます。
[ポリシー キー] を選択し、[追加] を選びます。
[オプション] で、[
Manual
] を選択します。ポリシー キーの名前を入力します。 たとえば、
ContosoSecret
のようにします。 プレフィックスB2C_1A_
がキーの名前に自動的に追加されます。[ シークレット] に、前に記録したクライアント シークレットを入力します。
[ キーの使用法] で、[
Signature
] を選択します。Create をクリックしてください。
CryptographicKeys
XML 要素に、次の要素を追加します。<CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/> </CryptographicKeys>
範囲
スコープは、ID プロバイダー ( openid profile
など) から収集しようとしている情報とアクセス許可を定義します。 ID プロバイダーから ID トークンを受け取るには、 openid
スコープを指定する必要があります。
ID トークンがないと、ユーザーはカスタム ID プロバイダーを使用して Azure AD B2C にサインインできません。 その他のスコープは、スペースで区切って追加できます。 カスタム ID プロバイダーのドキュメントを参照して、他にどのようなスコープが使用可能かを確認してください。
[スコープ] に、ID プロバイダーのスコープを入力します。 たとえば、openid profile
のようにします。
<Item Key="scope">
技術プロファイルのメタデータに、ID プロバイダーのスコープを入力します。 たとえば、openid profile
のようにします。
応答の種類
応答の種類は、カスタム ID プロバイダーの authorization_endpoint
への最初の呼び出しで返される情報の種類を示します。 次の応答タイプを使用できます。
-
code
: 認証コード フローに従って、コードは Azure AD B2C に返されます。 Azure AD B2C は、トークンのコードを交換するためにtoken_endpoint
を呼び出します。 -
id_token
: ID トークンは、カスタム ID プロバイダーから Azure AD B2C に返されます。
[ 応答の種類] で、ID プロバイダーの設定に応じて [ code
] または [ id_token
] を選択します。
<Item Key="response_types">
技術プロファイルのメタデータで、ID プロバイダーの設定に応じて code
を選択するか、id_token
を選択します。
応答モード
応答モードでは、カスタム ID プロバイダーから Azure AD B2C にデータを送信するために使用するメソッドを定義します。 次の応答モードを使用できます。
-
form_post
: この応答モードは、最高のセキュリティのために推奨されます。 応答は HTTPPOST
メソッドを介して送信され、コードまたはトークンはapplication/x-www-form-urlencoded
形式を使用して本文にエンコードされます。 -
query
: コードまたはトークンはクエリ パラメーターとして返されます。
レスポンスモードで、ID プロバイダの設定に応じて form_post
または query
を選択します。
<Item Key="response_mode">
技術プロファイルのメタデータで、ID プロバイダーの設定に応じて [form_post
] または [query
] を選択します。
ドメイン ヒント
ドメイン ヒントを使用すると、ユーザーが使用可能な ID プロバイダーの一覧から選択するのではなく、指定した ID プロバイダーのサインイン ページに直接スキップできます。
この種の動作を許可するには、ドメイン ヒントの値を入力します。 カスタム ID プロバイダーにジャンプするには、サインインのために Azure AD B2C を呼び出すときに、要求の末尾にパラメーター domain_hint=<___domain hint value>
を追加します。
[ドメイン ヒント] に、ドメイン ヒントで使用されているドメイン名を入力します。
<Domain>contoso.com</Domain>
技術プロファイル XML 要素に、ドメイン ヒントで使用されるドメイン名を入力します。 たとえば、contoso.com
のようにします。
クレーム マッピング
カスタム ID プロバイダーが ID トークンを Azure AD B2C に送り返した後、Azure AD B2C は、受信したトークンからの要求を、Azure AD B2C が認識して使用する要求にマップできる必要があります。 次のマッピングのそれぞれについて、カスタム ID プロバイダーのドキュメントを参照して、ID プロバイダーのトークンで返される要求を理解してください。
- ユーザー ID: サインインしているユーザーの 一意の識別子 を提供する要求を入力します。
- 表示名: ユーザーの 表示名 または フルネーム を提供する要求を入力します。
- 名: ユーザーの "名" を提供する要求を入力します。
- 姓: ユーザーの 姓 を提供する要求を入力します。
- メール: ユーザーの メール アドレス を提供する要求を入力します。
OutputClaims
要素には、ID プロバイダーから返される要求の一覧が含まれています。 ポリシーで定義されている要求の名前を、ID プロバイダーで定義されている名前にマップします。
<OutputClaims>
要素の下で、ID プロバイダーによって定義された対応する要求名を使用して PartnerClaimType
属性を構成します。
ClaimTypeReferenceId (クレームタイプ参照ID) | パートナークレームタイプ |
---|---|
issuerUserId |
サインインしているユーザーの 一意の識別子 を提供する要求を入力します。 |
displayName |
ユーザーの 表示名 または フルネーム を提供する要求を入力します。 |
givenName |
ユーザーの "名" を提供する要求を入力します。 |
surName |
ユーザーの 姓 を提供する要求を入力します。 |
email |
ユーザーの メール アドレス を提供する要求を入力します。 |
identityProvider |
トークン発行者の名前を提供する要求を入力します。 たとえば、iss のようにします。 ID プロバイダーがトークンに発行者要求を含めない場合は、ID プロバイダーの一意の識別子を使用して DefaultValue 属性を設定します。 たとえば、DefaultValue="contoso.com" のようにします。 |
ID プロバイダーをユーザー フローに追加する
- Azure AD B2C テナントで、[ ユーザー フロー] を選択します。
- ID プロバイダーを追加するユーザー フローをクリックします。
- [ソーシャル ID プロバイダー] で、追加した ID プロバイダーを選択します。 たとえば、 Contoso などです。
- 保存 を選択します。
ユーザー フローをテストする
- ポリシーをテストするには、[ ユーザー フローの実行] を選択します。
-
[アプリケーション] で、以前に登録した testapp1 という名前の Web アプリケーションを選択します。
応答 URL に
https://jwt.ms
が表示されます。 - [ ユーザー フローの実行 ] ボタンを選択します。
- サインアップ ページまたはサインイン ページで、サインインする ID プロバイダーを選択します。 たとえば、 Contoso などです。
サインイン プロセスが成功すると、ブラウザーは https://jwt.ms
にリダイレクトされ、Azure AD B2C によって返されるトークンの内容が表示されます。
ユーザー体験を追加する
この時点で、ID プロバイダーは設定されていますが、どのサインイン ページでもまだ使用できません。 独自のカスタム ユーザー体験がない場合は、既存のテンプレート ユーザー体験の複製を作成します。それ以外の場合は、次の手順に進みます。
- スターター パックから TrustFrameworkBase.xml ファイルを開きます。
-
を含む
Id="SignUpOrSignIn"
要素の内容全体を検索してコピーします。 - TrustFrameworkExtensions.xml を開き、UserJourneys 要素を見つけます。 要素が存在しない場合は、要素を追加します。
- UserJourneys 要素の子としてコピーした UserJourney 要素の内容全体を貼り付けます。
- ユーザージャーニーの 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 ] を選択して Google アカウントでサインインします。
サインイン プロセスが成功すると、ブラウザーは https://jwt.ms
にリダイレクトされ、Azure AD B2C によって返されるトークンの内容が表示されます。
既知の問題
- Azure AD B2C では、暗号化されたトークンを OpenID Connect ID プロバイダーと交換するための JWE (JSON Web 暗号化) はサポートされていません。
次のステップ
詳細については、 OpenId Connect テクニカル プロファイル リファレンス ガイドを参照してください。