在 Azure Active Directory B2C 中配置令牌
开始之前,请使用此页顶部的“选择策略类型”选择器来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。
本文介绍如何在 Azure Active Directory B2C(Azure AD B2C)中配置 令牌的生存期和兼容性 。
先决条件
- 创建用户流,以便用户能够注册并登录应用程序。
- 注册 Web 应用程序。
- 完成 Active Directory B2C 中的自定义策略入门中的步骤。 本教程指导你如何更新自定义策略文件以使用 Azure AD B2C 租户配置。
- 注册 Web 应用程序。
令牌生存期行为
可以配置令牌生存期,包括:
- 访问和 ID 令牌生存期(分钟) - OAuth 2.0 持有者令牌和 ID 令牌的生存期。 默认值为 60 分钟(1 小时)。 最小值(含)为 5 分钟。 最大值(含)为 1,440 分钟(24 小时)。
- 刷新令牌生存期(天)- 在应用程序已获取
offline_access
范围的情况下,可以使用某个刷新令牌获取新访问令牌之前所要经过的最长时间段。 默认值为 14 天。 最小值为 1 天(含)。 最大值(含)90 天。 - 刷新令牌滑动窗口生存期 - 刷新令牌滑动窗口类型。
Bounded
指示刷新令牌可以按 生存期长度(天)中的指定进行扩展。No expiry
指示刷新令牌滑动窗口生存期永不过期。 - 生存期长度(天) - 在此时间段过后,用户被迫重新进行身份验证,而不考虑应用程序获取的最新刷新令牌的有效期。 该值必须大于或等于 刷新令牌生存期 值。
以下图表显示刷新令牌滑动窗口生存期行为。
注释
将授权代码流与 PKCE 配合使用的单页应用程序始终刷新令牌生存期为 24 小时,而移动应用、桌面应用和 Web 应用不会遇到此限制。 详细了解浏览器中刷新令牌的安全影响。
配置令牌生存期
若要配置用户流令牌的生存期,请按照以下步骤操作:
- 登录到 Azure 门户。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户。
- 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
- 选择“用户流”(策略)。
- 打开之前创建的用户流。
- 选择“属性”。
- 在 “令牌生存期”下,调整属性以满足应用程序的需求。
- 选择 保存。
若要更改令牌兼容性设置,请在扩展中设置令牌颁发者技术配置文件元数据,或在想要影响的策略的信赖方文件中进行设置。 令牌颁发者技术配置文件类似于以下示例:
<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
。
若要配置用户流兼容性设置,请执行以下作:
- 选择“用户流”(策略)。
- 打开之前创建的用户流。
- 选择“属性”。
- 在 “令牌兼容性设置”下,调整属性以满足应用程序的需求。
- 选择 保存。
若要更改令牌兼容性的设置,请在扩展中设置 令牌颁发者 技术配置文件元数据,或要更新的策略的信赖方文件。 令牌颁发者技术简介如以下示例所示:
<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 元数据项设置的。 适用的值为
AuthorityAndTenantGuid
和AuthorityWithTfp
。设置声明表示策略 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" />
向应用提供可选声明
应用程序声明是应用程序返回的值。 更新用户流以包含所需的声明。
- 选择“用户流”(策略)。
- 打开之前创建的用户流。
- 选择 应用程序声明。
- 选择要发送回应用程序的声明和属性。
- 选择 保存。
信赖方策略技术配置文件输出声明是返回到应用程序的值。 添加输出声明将在用户旅程成功后将声明写入令牌,并发送给应用程序。 修改信赖方部分中的技术概要元素,以将所需声明添加为输出声明。
- 打开自定义策略文件。 例如,SignUpOrSignin.xml。
- 查找 OutputClaims 元素。 添加要包含在令牌中的 OutputClaim。
- 设置输出声明属性。
以下示例添加 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 分钟内兑换授权代码。
相关内容
- 详细了解如何 请求访问令牌。
- 了解如何 通过开发人员最佳做法构建复原能力。