在 Azure Active Directory B2C 中配置令牌

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

本文介绍如何在 Azure Active Directory B2C(Azure AD B2C)中配置 令牌的生存期和兼容性

先决条件

令牌生存期行为

可以配置令牌生存期,包括:

  • 访问和 ID 令牌生存期(分钟) - OAuth 2.0 持有者令牌和 ID 令牌的生存期。 默认值为 60 分钟(1 小时)。 最小值(含)为 5 分钟。 最大值(含)为 1,440 分钟(24 小时)。
  • 刷新令牌生存期(天)- 在应用程序已获取 offline_access 范围的情况下,可以使用某个刷新令牌获取新访问令牌之前所要经过的最长时间段。 默认值为 14 天。 最小值为 1 天(含)。 最大值(含)90 天。
  • 刷新令牌滑动窗口生存期 - 刷新令牌滑动窗口类型。 Bounded 指示刷新令牌可以按 生存期长度(天)中的指定进行扩展。 No expiry 指示刷新令牌滑动窗口生存期永不过期。
  • 生存期长度(天) - 在此时间段过后,用户被迫重新进行身份验证,而不考虑应用程序获取的最新刷新令牌的有效期。 该值必须大于或等于 刷新令牌生存期 值。

以下图表显示刷新令牌滑动窗口生存期行为。

刷新令牌生存期

注释

将授权代码流与 PKCE 配合使用的单页应用程序始终刷新令牌生存期为 24 小时,而移动应用、桌面应用和 Web 应用不会遇到此限制。 详细了解浏览器中刷新令牌的安全影响

配置令牌生存期

若要配置用户流令牌的生存期,请按照以下步骤操作:

  1. 登录到 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
  4. 选择“用户流”(策略)。
  5. 打开之前创建的用户流。
  6. 选择“属性”。
  7. “令牌生存期”下,调整属性以满足应用程序的需求。
  8. 选择 保存

在 Azure 门户中配置用户流令牌。

若要更改令牌兼容性设置,请在扩展中设置令牌颁发者技术配置文件元数据,或在想要影响的策略的信赖方文件中进行设置。 令牌颁发者技术配置文件类似于以下示例:

<ClaimsProviders>
  <ClaimsProvider>
    <DisplayName>Token Issuer</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="JwtIssuer">
        <Metadata>
          <Item Key="token_lifetime_secs">3600</Item>
          <Item Key="id_token_lifetime_secs">3600</Item>
          <Item Key="refresh_token_lifetime_secs">1209600</Item>
          <Item Key="rolling_refresh_token_lifetime_secs">7776000</Item>
          <!--<Item Key="allow_infinite_rolling_refresh_token">true</Item>-->
          <Item Key="IssuanceClaimPattern">AuthorityAndTenantGuid</Item>
          <Item Key="AuthenticationContextReferenceClaimPattern">None</Item>
        </Metadata>
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
</ClaimsProviders>

在前面的示例中设置了以下值:

  • token_lifetime_secs - 访问令牌生存期(秒)。 默认值为 3,600 (1 小时)。 最小值为 300 (5 分钟)。 最大值为 86,400 (24 小时)。
  • id_token_lifetime_secs - ID 令牌生存期(秒)。 默认值为 3,600 (1 小时)。 最小值为 300 (5 分钟)。 最大值为 86,400 (24 小时)。
  • refresh_token_lifetime_secs 刷新令牌生存期(秒)。 默认值为 1,209,600 (14 天)。 最小值为 86,400 (24 小时)。 最大值为 7,776,000 (90 天)。
  • rolling_refresh_token_lifetime_secs - 刷新令牌滑动窗口生存期(秒)。 默认值为 7,776,000(90 天)。 最小值为 86,400 (24 小时)。 最大值为 31,536,000 (365 天)。 如果不想强制实施滑动窗口生存期,请将 allow_infinite_rolling_refresh_token 的值设为 true
  • allow_infinite_rolling_refresh_token - 刷新令牌滑动窗口生存期从不过期。

令牌兼容性设置

可以配置令牌兼容性,包括:

  • 颁发者 (iss) 声明 - 访问令牌和 ID 令牌颁发者格式。
  • 主体 (sub) 声明 - 令牌对其信息进行断言的主体,例如应用程序的用户。 此值是不可变的,无法重新分配或重复使用。 它可用于安全地执行授权检查,例如,使用令牌访问资源时。 默认情况下,使用者声明会以目录中用户的对象 ID 进行填充。
  • 表示用户流的声明 - 此声明标识已执行的用户流。 可能的值为 tfp(默认)或 acr

若要配置用户流兼容性设置,请执行以下作:

  1. 选择“用户流”(策略)。
  2. 打开之前创建的用户流。
  3. 选择“属性”。
  4. “令牌兼容性设置”下,调整属性以满足应用程序的需求。
  5. 选择 保存

若要更改令牌兼容性的设置,请在扩展中设置 令牌颁发者 技术配置文件元数据,或要更新的策略的信赖方文件。 令牌颁发者技术简介如以下示例所示:

<ClaimsProviders>
  <ClaimsProvider>
    <DisplayName>Token Issuer</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="JwtIssuer">
        <Metadata>
          ...
          <Item Key="IssuanceClaimPattern">AuthorityAndTenantGuid</Item>
          <Item Key="AuthenticationContextReferenceClaimPattern">None</Item>
        </Metadata>
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
</ClaimsProviders>
  • 颁发者(iss) 声明 - 颁发者( iss)声明是使用 IssuerClaimPattern 元数据项设置的。 适用的值为 AuthorityAndTenantGuidAuthorityWithTfp

  • 设置声明表示策略 ID - 设置此值的选项是 TFP (信任框架策略)和 ACR (身份验证上下文参考)。 TFP 是建议的值。 将 AuthenticationContextReferenceClaimPattern 设置为 None 值。

    ClaimsSchema 元素中,添加以下元素:

    <ClaimType Id="trustFrameworkPolicy">
      <DisplayName>Trust framework policy name</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    

    信赖方策略OutputClaims 元素下,添加以下输出声明:

    <OutputClaim ClaimTypeReferenceId="trustFrameworkPolicy" Required="true" DefaultValue="{policy}" PartnerClaimType="tfp" />
    

    对于 ACR,请删除 AuthenticationContextReferenceClaimPattern 项。

  • Subject (sub) 声明 - 此选项默认为 ObjectID,如果要将此设置切换为 Not Supported,请替换以下行:

    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
    

    替换为以下代码行:

    <OutputClaim ClaimTypeReferenceId="sub" />
    

向应用提供可选声明

应用程序声明是应用程序返回的值。 更新用户流以包含所需的声明。

  1. 选择“用户流”(策略)。
  2. 打开之前创建的用户流。
  3. 选择 应用程序声明
  4. 选择要发送回应用程序的声明和属性。
  5. 选择 保存

信赖方策略技术配置文件输出声明是返回到应用程序的值。 添加输出声明将在用户旅程成功后将声明写入令牌,并发送给应用程序。 修改信赖方部分中的技术概要元素,以将所需声明添加为输出声明。

  1. 打开自定义策略文件。 例如,SignUpOrSignin.xml。
  2. 查找 OutputClaims 元素。 添加要包含在令牌中的 OutputClaim。
  3. 设置输出声明属性。

以下示例添加 accountBalance 声明。 accountBalance 声明将作为余额信息发送到应用程序。

<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}" />
      <!--Add the optional claims here-->
      <OutputClaim ClaimTypeReferenceId="accountBalance" DefaultValue="" PartnerClaimType="balance" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>

OutputClaim 元素包含以下属性:

  • ClaimTypeReferenceId - 策略文件或父策略文件中 的 ClaimsSchema 节中已定义的声明类型的标识符。
  • PartnerClaimType - 允许你更改令牌中的声明的名称。
  • DefaultValue - 默认值。 还可以将默认值设置为 声明解析程序,例如租户 ID。
  • AlwaysUseDefaultValue - 强制使用默认值。

授权代码生存期

使用 OAuth 2.0 授权代码流时,应用可以使用授权代码为目标资源请求访问令牌。 授权代码是生存期较短的,在大约 10 分钟后过期。 无法配置授权代码生存期。 请确保应用程序在 10 分钟内兑换授权代码。