将身份提供商访问令牌传递给 Azure Active Directory B2C 中的应用程序

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息

在开始之前,请使用此页面顶部的 “选择策略类型 选择器”来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。

Azure Active Directory B2C(Azure AD B2C)中的 用户流 为用户提供了注册或登录标识提供者的机会。 旅程开始时,Azure AD B2C 从标识提供者接收 访问令牌 。 Azure AD B2C 使用该令牌检索有关用户的信息。 在用户流中启用声明即可将该令牌传递给你在 Azure AD B2C 中注册的应用程序。

Azure AD B2C 支持传递 OAuth 2.0 标识提供者的访问令牌,其中包括 FacebookGoogle。 对于所有其他标识提供者,声明将返回空白。

Azure AD B2C 支持传递 OAuth 2.0OpenID Connect 标识提供者的访问令牌。 对于所有其他标识提供者,声明将返回空白。 有关更多详细信息,请查看标识提供者联合 实时演示

下图显示了标识提供者令牌如何返回到应用:

标识提供者传递流程

先决条件

启用声明

  1. 以 Azure AD B2C 租户的外部 ID 用户流管理员身份登录到 Azure 门户

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。

  3. 选择 Azure 门户左上角的“所有服务” ,搜索并选择 Azure AD B2C

  4. 选择 “用户流”(策略),然后选择用户流。 例如,B2C_1_signupsignin1。

  5. 选择 应用程序声明

  6. 启用“标识提供者访问令牌”声明。

    启用“标识提供者访问令牌”声明

  7. 单击“ 保存” 保存用户流。

测试用户流

在 Azure AD B2C 中测试应用程序时,可以让 Azure AD B2C 令牌返回到 https://jwt.ms,以便查看其中的声明。

  1. 在用户流的“概述”页上,选择“ 运行用户流”。

  2. 对于 应用程序,请选择之前注册的应用程序。 若要查看以下示例中的令牌, 回复 URL 应显示 https://jwt.ms

  3. 单击“ 运行用户流”,然后使用帐户凭据登录。 您应该在 idp_access_token 声明中看到身份提供者的访问令牌。

    应会看到类似于以下示例的内容:

    jwt.ms 中突出显示了 idp_access_token 块的已解码令牌

添加申请要素

  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. OutputClaim 元素添加到每个您想获取访问令牌的 OAuth 2.0 身份提供商的 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),并将 OutputClaim 元素添加到 TechnicalProfile

    <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 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“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. 选择“立即运行”。

    应会看到类似于以下示例的内容:

    jwt.ms 中突出显示了 idp_access_token 块的已解码令牌

传递 IDP 刷新令牌(可选)

标识提供者返回的访问令牌在短时间内有效。 某些身份提供者除了颁发访问令牌,还会颁发刷新令牌。 然后,客户端应用程序可以根据需要交换标识提供者的刷新令牌以获取新的访问令牌。

Azure AD B2C 自定义策略支持传递 OAuth 2.0 标识提供者(包括 FacebookGoogleGitHub)的刷新令牌。

若要传递标识提供者的刷新令牌,请执行以下步骤:

  1. 打开 TrustframeworkExtensions.xml 文件,并将标识符为 的identityProviderRefreshToken以下 ClaimType 元素添加到 ClaimsSchema 元素中。

    <ClaimType Id="identityProviderRefreshToken">
        <DisplayName>Identity provider refresh token</DisplayName>
        <DataType>string</DataType>
    </ClaimType>
    
  2. OutputClaim 元素添加到每个 OAuth 2.0 身份提供者的 TechnicalProfile 元素,以便获取刷新令牌。 下面的示例显示了添加到 Facebook 技术配置文件的该元素:

    <ClaimsProvider>
      <DisplayName>Facebook</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Facebook-OAUTH">
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="identityProviderRefreshToken" PartnerClaimType="{oauth2:refresh_token}" />
          </OutputClaims>
          ...
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  3. 一些标识提供者要求将元数据或范围包含到标识提供者的技术配置文件中。

    • 对于 Google 标识提供者,请添加两种声明类型 access_typeprompt。 然后将以下输入声明添加到标识提供者的技术资料中:

      <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>
      
    • 其他标识提供者可能有不同的方法来颁发刷新令牌。 遵循标识提供程序的受众定位,并将必要的元素添加到您的标识提供程序的技术概要文件中。

  4. 保存您在 TrustframeworkExtensions.xml 文件中所做的更改。

  5. 打开您的信赖方策略文件(如 SignUpOrSignIn.xml),并将 OutputClaim 元素添加到 TechnicalProfile

    <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 令牌概述中了解详细信息。