你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Active Directory 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 标识提供者的访问令牌。 对于所有其他标识提供者,声明将返回空白。 有关更多详细信息,请查看标识提供者联合实时演示

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

Identity provider pass through flow

先决条件

启用声明

  1. 以 Azure AD B2C 租户的全局管理员身份登录 Azure 门户

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

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

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

  5. 选择“应用程序声明” 。

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

    Enable the Identity Provider Access Token claim

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

测试用户流

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

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

  2. 对于“应用程序” ,选择你之前注册的应用程序。 “回复 URL” 应当显示 https://jwt.ms 才能看到以下示例中的令牌。

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

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

    Decoded token in jwt.ms with idp_access_token block highlighted

添加声明元素

  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 元素。 下面的示例显示了添加到 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,向 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. 选择“标识体验框架”。
  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 刷新令牌(可选)

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

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

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

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

    <ClaimType Id="identityProviderRefreshToken">
        <DisplayName>Identity provider refresh token</DisplayName>
        <DataType>string</DataType>
    </ClaimType>
    
  2. 针对你需要其刷新令牌的每个 OAuth 2.0 标识提供者,向 TechnicalProfile 元素中添加 OutputClaim 元素。 下面的示例显示了添加到 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 令牌概述中了解详细信息。