在 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) 声明是通过 IssuanceClaimPattern 元数据项设置的。 适用的值为
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 项。
使用者 (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 分钟内兑换授权代码。
后续步骤
- 详细了解如何请求访问令牌。
- 了解如何通过开发人员最佳做法构建复原能力。