You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure AD B2C用户流中判断用户是否勾选“保持登录状态”选项

如何通过Azure AD B2C用户流判断用户是否勾选“保持登录状态”

首先得明确一个关键点:Azure AD B2C的用户流目前不会直接返回用户是否勾选KMSI(保持登录)的标识字段——这也是很多开发者遇到的痛点,官方文档里确实没有提供这个直接的返回值。不过我们可以通过一些间接的方式来推断用户的选择,同时调整你的自动登出逻辑来适配需求:

1. 核心方案:利用刷新令牌的有效期差异

当用户勾选“保持登录”时,Azure AD B2C会返回有效期更长的刷新令牌(默认是14天,你可以在用户流的「令牌」设置里调整这个时长);如果用户没勾选,刷新令牌的有效期会短很多(默认是24小时)。你可以通过以下步骤判断:

  • 在获取令牌的响应中,查看refresh_token对应的expires_in参数(这个值会直接返回在令牌响应里)
  • 如果这个有效期远大于访问令牌的60分钟(比如达到天级别),就可以推断用户勾选了“保持登录”选项

举个例子:如果你的用户流设置KMSI开启后刷新令牌有效期为14天,那么响应里的expires_in会是1209600(14243600),而未勾选时可能是86400(24小时)。通过这个数值差异就能判断用户的选择。

2. 前端辅助验证(可选)

如果你的应用是前端应用(比如SPA),可以在用户提交登录表单前,监听“保持登录”复选框的状态,把这个状态存在本地存储(比如localStorage)里。不过要注意:这种方式只能作为辅助,不能完全信任(因为用户可能篡改本地存储的值),需要结合后端对刷新令牌有效期的验证来确保准确性。

3. 调整自动登出逻辑的建议

针对你提到的“访问令牌过期就自动登出”的问题,结合KMSI场景,你可以这样优化逻辑:

  • 当推断用户勾选了“保持登录”时,不要在访问令牌过期后直接登出,而是调用Azure AD B2C的token_endpoint,用刷新令牌换取新的访问令牌(请求参数为grant_type=refresh_token)
  • 只有当刷新令牌也过期时,再引导用户重新登录

关于自定义策略的补充

你提到目前难以实施自定义策略,但如果后续有机会切换,自定义策略确实能直接解决这个问题:你可以在ClaimsSchema中添加kmsi声明,然后在用户旅程中收集这个声明并返回给应用,这样就能直接拿到用户是否勾选的状态。不过在当前用户流的架构下,上述的间接方案是最可行的。

内容的提问来源于stack exchange,提问作者Baraa Al-jabali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 14:37:33