Azure Active Directory B2C で ID プロバイダーのアクセス トークンをアプリケーションに渡す

"開始する前に"、[ポリシーの種類の選択] セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。

Azure Active Directory B2C (Azure AD B2C) のユーザー フローは、アプリケーションのユーザーに、ID プロバイダーを使用してサインアップまたはサインインする機会を提供します。 ジャーニーが開始されると、Azure AD B2C は ID プロバイダーからアクセス トークンを受け取ります。 Azure AD B2C はそのトークンを使用して、そのユーザーに関する情報を取得します。 ユーザー フローで要求を有効にして、Azure AD B2C に登録するアプリケーションにそのトークンを渡します。

Azure AD B2C では、FacebookGoogle などの OAuth 2.0 ID プロバイダーのアクセス トークンを渡すことがサポートされています。 その他すべての ID プロバイダーについては、要求が空で返されます。

Azure AD B2C では、OAuth 2.0 および OpenID Connect ID プロバイダーのアクセス トークンを渡すことがサポートされています。 その他すべての ID プロバイダーについては、要求が空で返されます。 詳細については、ID プロバイダー フェデレーションのライブ デモを参照してください。

次の図は、ID プロバイダーのトークンがどのようにアプリに返されるかを示しています。

Identity provider pass through flow

前提条件

要求を有効にする

  1. Azure AD B2C テナントの全体管理者として Azure Portal にサインインします。

  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選び、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。

  3. Azure Portal の左上隅の [すべてのサービス] を選択し、 [Azure AD B2C] を検索して選択します。

  4. [ユーザー フロー (ポリシー)] を選択し、ご自身のユーザー フローを選択します。 たとえば、B2C_1_signupsignin1 などです。

  5. [アプリケーション クレーム] を選択します。

  6. [ID プロバイダーのアクセス トークン] 要求を有効にします。

    Enable the Identity Provider Access Token claim

  7. [保存] をクリックしてユーザー フローを保存します。

ユーザー フローをテストする

Azure AD B2C でアプリケーションをテスト中に、Azure AD B2C トークンを https://jwt.ms に返して、その中の要求を見直すと便利なことがあります。

  1. ユーザー フローの [概要] ページで、 [ユーザー フローを実行します] を選択します。

  2. [アプリケーション] には、前に登録したアプリケーションを選択します。 以下の例でトークンを表示するには、 [応答 URL]https://jwt.ms が表示される必要があります。

  3. [ユーザー フローを実行します] をクリックし、その後ご自身のアカウントの資格情報でサインインします。 ID プロバイダーのアクセス トークンは idp_access_token 要求に表示されます。

    次の例のようなコードが表示されます。

    Decoded token in jwt.ms with idp_access_token block highlighted

要求の要素を追加する

  1. ご自身の TrustframeworkExtensions.xml ファイルを開き、識別子が identityProviderAccessToken の次の ClaimType 要素を、ClaimsSchema 要素に追加します。

    <BuildingBlocks>
      <ClaimsSchema>
        <ClaimType Id="identityProviderAccessToken">
          <DisplayName>Identity Provider Access Token</DisplayName>
          <DataType>string</DataType>
          <AdminHelpText>Stores the access token of the identity provider.</AdminHelpText>
        </ClaimType>
        ...
      </ClaimsSchema>
    </BuildingBlocks>
    
  2. アクセス トークンを必要とする OAuth 2.0 ID プロバイダーごとに、OutputClaim 要素を TechnicalProfile 要素に追加します。 次の例は、Facebook の技術プロファイルに追加された要素を示します。

    <ClaimsProvider>
      <DisplayName>Facebook</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Facebook-OAUTH">
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="{oauth2:access_token}" />
          </OutputClaims>
          ...
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  3. TrustframeworkExtensions.xml ファイルを保存します。

  4. ご自身の証明書利用者のポリシー ファイル (SignUpOrSignIn.xml など) を開き、TechnicalProfileOutputClaim 要素を追加します。

    <RelyingParty>
      <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
      <TechnicalProfile Id="PolicyProfile">
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="idp_access_token"/>
        </OutputClaims>
        ...
      </TechnicalProfile>
    </RelyingParty>
    
  5. ポリシー ファイルを保存します。

ポリシーのテスト

Azure AD B2C でアプリケーションをテスト中に、Azure AD B2C トークンを https://jwt.ms に返して、その中の要求を見直すことができると便利なことがあります。

ファイルのアップロード

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
  3. Azure portal の左上隅にある [すべてのサービス] を選択してから、 [Azure AD B2C] を検索して選択します。
  4. [Identity Experience Framework] を選択します。
  5. [カスタム ポリシー] ページで、 [ポリシーのアップロード] をクリックします。
  6. [ポリシーが存在する場合は上書きする] を選択し、TrustframeworkExtensions.xml ファイルを検索して選択します。
  7. [アップロード] を選択します。
  8. その証明書利用者ファイル (SignUpOrSignIn.xml など) で、手順 5 から 7 を繰り返します。

ポリシーを実行する

  1. 変更したポリシーを開きます。 たとえば、B2C_1A_signup_signin などです。

  2. [アプリケーション] には、前に登録したアプリケーションを選択します。 以下の例でトークンを表示するには、 [応答 URL]https://jwt.ms が表示される必要があります。

  3. [今すぐ実行] を選択します。

    次の例のようなコードが表示されます。

    Decoded token in jwt.ms with idp_access_token block highlighted

IDP 更新トークンを渡す (省略可能)

ID プロバイダーから返されるアクセス トークンは、短時間有効です。 一部の ID プロバイダーでは、アクセス トークンと共に更新トークンも発行されます。 クライアント アプリケーションでは、必要に応じて、ID プロバイダーの更新トークンを新しいアクセス トークンに交換できます。

Azure AD B2C カスタム ポリシーは、FacebookGoogle、および GitHub などの OAuth 2.0 ID プロバイダーの更新トークンを渡すことができます。

ID プロバイダーの更新トークンを渡すには、次の手順に従います。

  1. ご自身の TrustframeworkExtensions.xml ファイルを開き、識別子が identityProviderRefreshToken の次の ClaimType 要素を、ClaimsSchema 要素に追加します。

    <ClaimType Id="identityProviderRefreshToken">
        <DisplayName>Identity provider refresh token</DisplayName>
        <DataType>string</DataType>
    </ClaimType>
    
  2. 更新トークンを必要とする OAuth 2.0 ID プロバイダーごとに、OutputClaim 要素を TechnicalProfile 要素に追加します。 次の例は、Facebook の技術プロファイルに追加された要素を示します。

    <ClaimsProvider>
      <DisplayName>Facebook</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Facebook-OAUTH">
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="identityProviderRefreshToken" PartnerClaimType="{oauth2:refresh_token}" />
          </OutputClaims>
          ...
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  3. 一部の ID プロバイダーでは、ID プロバイダーの技術プロファイルにメタデータまたはスコープを含める必要があります。

    • Google ID プロバイダーの場合は、access_typeprompt の 2 つの要求の種類を追加します。 次に、ID プロバイダーの技術プロファイルに次の入力要求を追加します。

      <InputClaims>
          <InputClaim ClaimTypeReferenceId="access_type" PartnerClaimType="access_type" DefaultValue="offline" AlwaysUseDefaultValue="true" />
      
          <!-- The refresh_token is return only on the first authorization for a given user. Subsequent authorization request doesn't return the refresh_token.
              To fix this issue we add the prompt=consent query string parameter to the authorization request-->
          <InputClaim ClaimTypeReferenceId="prompt" PartnerClaimType="prompt" DefaultValue="consent" AlwaysUseDefaultValue="true" />
      </InputClaims>
      
    • 他の ID プロバイダーでは、更新トークンを発行する方法が異なる場合があります。 ID プロバイダーの対象ユーザーに従い、ID プロバイダーの技術プロファイルに必要な要素を追加します。

  4. TrustframeworkExtensions.xml ファイルで行った変更を保存します。

  5. ご自身の証明書利用者のポリシー ファイル (SignUpOrSignIn.xml など) を開き、TechnicalProfileOutputClaim 要素を追加します。

    <RelyingParty>
      <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
      <TechnicalProfile Id="PolicyProfile">
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="identityProviderRefreshToken" PartnerClaimType="idp_refresh_token"/>
        </OutputClaims>
        ...
      </TechnicalProfile>
    </RelyingParty>
    
  6. ポリシーの証明書利用者ポリシー ファイルで行った変更を保存します。

  7. TrustframeworkExtensions.xml ファイルをアップロードし、証明書利用者ポリシー ファイルをアップロードします。

  8. ポリシーのテスト

次のステップ

Azure AD B2C トークンの概要に関する記事で詳細を参照してください。