次の方法で共有


Azure Active Directory B2C カスタム ポリシーでの要求リゾルバーについて

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

Azure Active Directory B2C (Azure AD B2C) カスタム ポリシーでの要求リゾルバーは、ポリシー名、要求の相関 ID、ユーザー インターフェイス言語など、承認要求に関するコンテキスト情報を提供します。

入力要求または出力要求で要求リゾルバーを使用するには、ClaimsSchema 要素の下で文字列 ClaimType を定義した後、入力または出力の要求要素で DefaultValue を要求リゾルバーに設定します。 Azure AD B2C によって要求リゾルバーの値が読み取られて、技術プロファイルで使用されます。

次の例では、correlationId という名前の要求の種類が、string で定義されています。

<ClaimType Id="correlationId">
  <DisplayName>correlationId</DisplayName>
  <DataType>string</DataType>
  <UserHelpText>Request correlation Id</UserHelpText>
</ClaimType>

技術プロファイルでは、要求リゾルバーが要求の種類にマップされます。 Azure AD B2C では、要求リゾルバー {Context:CorrelationId} の値が要求 correlationId に設定されて、技術プロファイルに要求が送信されます。

<InputClaim ClaimTypeReferenceId="correlationId" DefaultValue="{Context:CorrelationId}" />

カルチャ

次の表に、要求リゾルバーと、承認要求で使用される言語に関する情報を示します。

要求 説明
{Culture:言語名} 言語に対する 2 文字の ISO コード。 en
{文化:LCID} 言語コードの LCID。 1033
{カルチャ:地域名} リージョンに対する 2 文字の ISO コード。 アメリカ
{文化:RFC5646} RFC5646 言語コード。 ja-JP

このカルチャ要求リゾルバーのライブ デモをご覧ください。

ポリシー

次の表に、要求リゾルバーと、承認要求で使用されるポリシーに関する情報を示します。

要求 説明
{ポリシー:PolicyId} 証明書利用者ポリシーの名前。 B2C_1A_signup_signin
{ポリシー:RelyingPartyTenantId} 証明書利用者ポリシーのテナント ID。 your-tenant.onmicrosoft.com
{ポリシー:TenantObjectId} 証明書利用者ポリシーのテナント オブジェクト ID。 00000000-0000-0000-0000-000000000000
{ポリシー:TrustFrameworkTenantId} 信頼フレームワークのテナント ID。 your-tenant.onmicrosoft.com

このポリシー要求リゾルバーのライブ デモをご覧ください。

コンテキスト

次の表は、承認要求のコンテキスト要求リゾルバーを示しています。

要求 説明
{コンテキスト:ビルド番号} Identity Experience Framework のバージョン (ビルド番号)。 1.0.507.0
{コンテキスト:CorrelationId} 関連付け ID。 00000000-0000-0000-0000-000000000000
{コンテキスト:DateTimeInUtc} UTC での日時。 2021 年 10 月 10 日午後 12:00:00
{コンテキスト:DeploymentMode} ポリシーの展開モード。 生産
{コンテキスト:ホスト名} 現在の要求のホスト名。 contoso.b2clogin.com
{コンテキスト:IPAddress} ユーザーの IP アドレス。 11.111.111.11
{コンテキスト:KMSI} [サインインしたままにする] チェックボックスがオンになっているかどうかを示します。 ほんとう

このコンテキスト要求リゾルバーのライブ デモをご覧ください。

請求

このセクションでは、要求の値を要求リゾルバーとして取得する方法について説明します。

要求 説明
{クレーム:クレームタイプ} ポリシーファイルまたは親ポリシーファイルの ClaimsSchema セクションで定義済みの要求の種類の識別子。 例: {Claim:displayName}、または {Claim:objectId} 要求の種類の値。

OpenIDコネクト

次の表に、要求リゾルバーと、OpenID Connect 承認要求に関する情報を示します。

要求 説明
{OIDC:AuthenticationContextReferences} acr_values クエリ文字列パラメーター。 該当なし
{OIDC:クライアントID} client_id クエリ文字列パラメーター。 00001111-AAAA-2222-BBBB-3333CCCCC4444
{OIDC:ドメインヒント} domain_hint クエリ文字列パラメーター。 facebook.com
{OIDC:ログインヒント} login_hint クエリ文字列パラメーター。 someone@contoso.com
{OIDC:マックスエイジ} max_age 該当なし
{OIDC:ノンス} Nonce クエリ文字列パラメーター。 デフォルトノンス
{OIDC:パスワード} リソース所有者のパスワード資格情報フロー ユーザーのパスワード。 パスワード 1
{OIDC:プロンプト} prompt クエリ文字列パラメーター。 ログイン (login)
{OIDC:リダイレクトUri} redirect_uri クエリ文字列パラメーター。 https://jwt.ms
{OIDC:リソース} resource クエリ文字列パラメーター。 該当なし
{OIDC:スコープ} scope クエリ文字列パラメーター。 openid(オープンID認証プロトコル)
{OIDC:ユーザー名} リソース所有者のパスワード資格情報フロー ユーザーのユーザー名。 emily@contoso.com
{OIDC:IdToken} id token クエリ文字列パラメーター。 該当なし

この OpenID Connect 要求リゾルバーのライブ デモをご覧ください。

OAuth2 のキー値パラメーター

OIDC 要求または OAuth2 要求の一部に含まれているすべてのパラメーター名は、ユーザー体験の要求にマップできます。 たとえば、アプリケーションからの要求には、app_session の名前、loyalty_number、またはカスタム クエリ 文字列が指定されたクエリ文字列パラメーターが含まれる場合があります。

要求 説明
{OAUTH-KV:キャンペーンID} クエリ文字列パラメーター。 ハワイ
{OAUTH-KV:app_session} クエリ文字列パラメーター。 A3C5Rの
{OAUTH-KV:loyalty_number} クエリ文字列パラメーター。 1234
{OAUTH-KV:任意のカスタム クエリ文字列} クエリ文字列パラメーター。 該当なし

SAML キー値パラメーター

SAML 認証要求では、要求に含まれているが、プロトコルに固有ではないパラメーター名 (SAMLRequest など) は、ユーザー体験の要求にマップできます。 たとえば、要求には、 usernameなどのカスタム パラメーターを含めることができます。 これは、SP によって開始される SAML 要求と IDP によって開始される SAML 要求の両方に適用されます。

要求 説明
{SAML-KV:ユーザー名} クエリ文字列または POST 本文パラメーター。 username@___domain.com
{SAML-KV:loyalty_number} クエリ文字列または POST 本文パラメーター。 1234
{SAML-KV:any カスタム クエリ文字列} クエリ文字列または POST 本文パラメーター。 該当なし

SAMLの

次の表に、要求リゾルバーと、SAML 承認要求に関する情報を示します。

要求 説明
{SAML:AuthnContextClassReferences} SAML 要求からの AuthnContextClassRef 要素の値。 urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
{SAML:NameIdPolicyFormat} SAML 要求の Format 要素からの NameIDPolicy 属性。 urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
{SAML:発行者} SAML 要求の SAML Issuer 要素の値。 https://contoso.com
{SAML:作成を許可} SAML 要求の AllowCreate 要素からの NameIDPolicy 属性値。 正しい
{SAML:ForceAuthn} SAML 要求の ForceAuthN 要素からの AuthnRequest 属性値。 正しい
{SAML:プロバイダー名} SAML 要求の ProviderName 要素からの AuthnRequest 属性値。 Contoso.com
{SAML:リレーステート} RelayState クエリ文字列パラメーター。
{SAML:件名} SAML AuthN 要求の NameId 要素からの Subject
{SAML:バインディング} SAML 要求の ProtocolBinding 要素からの AuthnRequest 属性値。 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST

この SAML 要求リゾルバーのライブ デモをご覧ください。

OAuth2 ID プロバイダー

次の表に、OAuth2 ID プロバイダーの要求リゾルバーを示します。

要求 説明
{OAuth2:access_token} OAuth2 id プロバイダーのアクセストークン。 access_token 属性。 eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1Ni...
{OAuth2:token_type} アクセストークンの型。 token_type 属性。 持参人
{OAuth2:expires_in} アクセス トークンが有効な時間の長さ (秒単位)。 expires_in 属性。 出力要求のデータ型intまたはlongである必要があります。 960000
{OAuth2:refresh_token} OAuth2 ID プロバイダーの更新トークン。 refresh_token 属性。 eyJraWQiOiJacW9pQlp2TW5pYVc2MUY...

OAuth2 id プロバイダーの要求リゾルバーを使用するには、出力要求の PartnerClaimType 属性を要求リゾルバーに設定します。 次の例は、外部 id プロバイダーの要求を取得する方法を示しています。

<ClaimsProvider>
  <DisplayName>Contoso</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Contoso-OAUTH">
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="{oauth2:access_token}" />
        <OutputClaim ClaimTypeReferenceId="identityProviderAccessTokenType" PartnerClaimType="{oauth2:token_type}" />
        <OutputClaim ClaimTypeReferenceId="identityProviderAccessTokenExpiresIn" PartnerClaimType="{oauth2:expires_in}" />
        <OutputClaim ClaimTypeReferenceId="identityProviderRefreshToken" PartnerClaimType="{oauth2:refresh_token}" />
      </OutputClaims>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

要求リゾルバーの使用

次の要素を使用して、要求リゾルバーを使用できます。

アイテム 要素 設定
Application Insights の技術プロファイル InputClaim
Microsoft Entra 技術プロファイル InputClaimOutputClaim 1、2
OAuth2 の技術プロファイル InputClaimOutputClaim 1、2
OpenID Connect の技術プロファイル InputClaimOutputClaim 1、2
要求変換 の技術プロファイル InputClaimOutputClaim 1、2
RESTful プロバイダー の技術プロファイル InputClaim 1、2
SAML ID プロバイダーの技術プロファイル OutputClaim 1、2
セルフアサート の技術プロファイル InputClaimOutputClaim 1、2
コンテンツ定義 LoadUri
ContentDefinitionParameters (コンテンツ定義パラメーター) Parameter
RelyingParty の技術プロファイル OutputClaim 2

設定:

  1. IncludeClaimResolvingInClaimsHandling メタデータを true に設定する必要があります。
  2. 入力要求または出力要求の属性 AlwaysUseDefaultValue は、trueに設定する必要があります。

要求リゾルバーのサンプル

RESTful 技術プロファイル

RESTful 技術プロファイルでは、ユーザーの言語、ポリシー名、スコープ、クライアント ID を送信したいことがあります これらの要求に基づいて、REST API はカスタム ビジネス ロジックを実行できます。また必要に応じて、ローカライズされたエラー メッセージを発生させることができます。

このシナリオを使用する RESTful 技術プロファイルの例を次に示します。

<TechnicalProfile Id="REST">
  <DisplayName>Validate user input data and return loyaltyNumber claim</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ServiceUrl">https://your-app.azurewebsites.net/api/identity</Item>
    <Item Key="AuthenticationType">None</Item>
    <Item Key="SendClaimsIn">Body</Item>
    <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="userLanguage" DefaultValue="{Culture:LCID}" AlwaysUseDefaultValue="true" />
    <InputClaim ClaimTypeReferenceId="policyName" DefaultValue="{Policy:PolicyId}" AlwaysUseDefaultValue="true" />
    <InputClaim ClaimTypeReferenceId="scope" DefaultValue="{OIDC:Scope}" AlwaysUseDefaultValue="true" />
    <InputClaim ClaimTypeReferenceId="clientId" DefaultValue="{OIDC:ClientId}" AlwaysUseDefaultValue="true" />
  </InputClaims>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

直接サインイン

要求リゾルバーを使用すると、サインイン名を事前入力したり、Facebook、LinkedIn、Microsoft アカウントなどの特定のソーシャル ID プロバイダーに直接サインインしたりできます。 詳しくは、「Azure Active Directory B2C を使用した直接サインインの設定」をご覧ください。

動的 UI のカスタマイズ

Azure AD B2C を使用すると、HTML コンテンツ定義エンドポイントにクエリ文字列パラメーターを渡して、ページの内容を動的にレンダリングできます。 たとえば、この機能を利用すると、 Web またはモバイル アプリケーションから渡すカスタム パラメーターに基づいて、Azure AD B2C サインアップまたはサインイン ページの背景イメージを変更することができます。 詳しくは、Azure Active Directory B2C でのカスタム ポリシーを使用した UI の動的な構成に関するページをご覧ください。 言語パラメーターに基づいて HTML ページをローカライズしたり、クライアント ID に基づいて内容を変更したりすることもできます。

次の例では、名前が campaignId で値が Hawaii のクエリ文字列パラメーター、language コード en-US、およびクライアント ID を表す app を渡しています。

<UserJourneyBehaviors>
  <ContentDefinitionParameters>
    <Parameter Name="campaignId">{OAUTH-KV:campaignId}</Parameter>
    <Parameter Name="language">{Culture:RFC5646}</Parameter>
    <Parameter Name="app">{OIDC:ClientId}</Parameter>
  </ContentDefinitionParameters>
</UserJourneyBehaviors>

結果として、Azure AD B2C によって HTML コンテンツ ページに上記のパラメーターが送信されます。

/selfAsserted.aspx?campaignId=hawaii&language=en-US&app=0239a9cc-309c-4d41-87f1-31288feb2e82

コンテンツ定義

ContentDefinitionLoadUriでは、使用されるパラメーターに基づいて、さまざまな場所からコンテンツをプルする要求リゾルバーを送信できます。

<ContentDefinition Id="api.signuporsignin">
  <LoadUri>https://contoso.blob.core.windows.net/{Culture:LanguageName}/myHTML/unified.html</LoadUri>
  ...
</ContentDefinition>

Application Insights の技術プロファイル

Azure Application Insights と要求リゾルバーを使用すると、ユーザーの動作に関する分析情報を取得できます。 Application Insights の技術プロファイルでは、Azure Application Insights に保持される入力要求を送信します。 詳しくは、「Application Insights を使用した Azure AD B2C 体験でのユーザー動作の追跡」をご覧ください。 次の例では、ポリシー ID、相関 ID、言語、クライアント ID を Azure Application Insights に送信しています。

<TechnicalProfile Id="AzureInsights-Common">
  <DisplayName>Alternate Email</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.Insights.AzureApplicationInsightsProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  ...
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="PolicyId" PartnerClaimType="{property:Policy}" DefaultValue="{Policy:PolicyId}" />
    <InputClaim ClaimTypeReferenceId="CorrelationId" PartnerClaimType="{property:CorrelationId}" DefaultValue="{Context:CorrelationId}" />
    <InputClaim ClaimTypeReferenceId="language" PartnerClaimType="{property:language}" DefaultValue="{Culture:RFC5646}" />
    <InputClaim ClaimTypeReferenceId="AppId" PartnerClaimType="{property:App}" DefaultValue="{OIDC:ClientId}" />
  </InputClaims>
</TechnicalProfile>

証明書利用者ポリシー

証明書利用者 ポリシー技術プロファイルでは、テナント ID または関連付け ID を JWT 内の証明書利用者アプリケーションに送信することができます。

<RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="email" />
        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
        <OutputClaim ClaimTypeReferenceId="identityProvider" />
        <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
        <OutputClaim ClaimTypeReferenceId="correlationId" AlwaysUseDefaultValue="true" DefaultValue="{Context:CorrelationId}" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
  </RelyingParty>