在 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 标识提供者的访问令牌。 对于所有其他标识提供者,声明将返回空白。

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 文件,向 ClaimsSchema 元素中添加标识符为 identityProviderAccessToken 的以下 ClaimType 元素:

    <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 标识提供者,向 TechnicalProfile 元素中添加 OutputClaim 元素。

  3. 保存 TrustframeworkExtensions.xml 文件。

  4. 打开你的信赖方策略文件,例如 SignUpOrSignIn.xml,向 TechnicalProfile 中添加 OutputClaim 元素:

    <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. 对于“应用程序” ,选择你之前注册的应用程序。 要在下面的示例中看到该令牌,Reply URL 应显示为 https://jwt.ms

  3. 选择“立即运行”。

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

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

传递 IDP 刷新令牌(可选)

标识提供者返回的访问令牌在短时间内有效。 一些标识提供者还会同时发布刷新令牌和访问令牌。 然后,客户端应用程序可以在需要时使用标识提供者的刷新令牌交换新的访问令牌。

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

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

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

    <ClaimType Id="identityProviderRefreshToken">
        <DisplayName>Identity provider refresh token</DisplayName>
        <DataType>string</DataType>
    </ClaimType>
    
  2. 对于要获取其刷新令牌的每个 OAuth 2.0 标识提供者,请将 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. 一些标识提供者要求将元数据或范围包含到标识提供者的技术配置文件中。

    • 对于 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,向 TechnicalProfile 中添加 OutputClaim 元素:

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