Azure刷新令牌90天过期异常咨询及永久有效期配置疑问
关于Azure AD委托流程中刷新令牌过期异常的问题解答
1. 刷新令牌持续使用却触发90天不活动过期的可能原因
首先,咱们先明确Azure AD机密客户端的刷新令牌机制:正常情况下,每次用刷新令牌获取新的访问令牌时,会返回一个新的刷新令牌(也就是滚动刷新),旧的刷新令牌会直接失效。如果你的流程确实一直在持续替换刷新令牌,那出现这个异常大概率是这几个原因:
- 租户令牌生命周期/条件访问策略变更:客户租户可能修改了刷新令牌的最大生命周期或不活动窗口设置,或是启用了条件访问中的会话控制规则(比如强制定期重新认证),这些配置会覆盖默认的90天规则。
- 某次刷新调用失败未更新令牌:如果某次调用
https://login.microsoftonline.com/common/oauth2/v2.0/token时出现错误(比如网络波动、权限被撤销),但你的代码没处理这个异常,继续沿用旧的刷新令牌,等到后续再调用时,旧令牌可能已经超过了从上次成功刷新开始计算的不活动期,直接过期。 - 用户账户状态变动:比如用户修改了密码、新启用了MFA、账户被临时锁定,这些操作都会让该用户关联的所有刷新令牌直接失效,哪怕你之前一直在正常使用。
offline_access范围丢失:如果授权流程中后续的刷新请求没正确保留offline_access范围,或是租户管理员撤销了应用的这个权限,也会导致刷新令牌无法续期,触发过期告警。
2. 能否设置刷新令牌永不过期?配置方是谁?
很遗憾,没法设置刷新令牌永不过期——出于安全合规的考虑,Azure AD从设计上就不支持永久有效的刷新令牌。不过你可以通过调整相关策略延长有效期:
- 这个配置必须在客户的Azure租户侧完成,因为令牌生命周期是租户级别的控制项:
- 客户可以通过Azure AD的令牌生命周期策略,针对特定应用或用户组调整刷新令牌的最大生命周期(最长可设置到180天,具体取决于Azure AD版本);
- 也可以通过条件访问策略中的会话控制,配置“持久化会话”或延长会话有效期,间接拉长刷新令牌的可用时间。
3. 如何确认是否为机密客户端?
判断自己的应用是不是机密客户端,看这几个直观的点就行:
- 应用注册类型:在Azure AD应用注册的“概述”页面,查看“应用类型”——如果是「Web应用/API」或「守护程序应用」,那就是机密客户端;如果是「公共客户端(移动和桌面)」,则属于公共客户端。
- 客户端凭据配置:检查应用注册的「证书和密码」页面,如果配置了客户端密码(Client Secret)或客户端证书,说明你的应用是机密客户端(机密客户端需要用凭据证明身份,而公共客户端无法安全存储这类凭据)。
- Token端点调用方式:你调用
https://login.microsoftonline.com/common/oauth2/v2.0/token时,如果请求参数里包含了client_secret(或是用证书做身份验证),那这就是机密客户端的调用方式——公共客户端调用该端点时不会传递客户端密钥。
另外,你提到已经在用新刷新令牌替换旧令牌,这个操作是正确的,但要确保每次成功获取新令牌后都立即更新存储的刷新令牌,同时做好错误处理(比如捕获刷新失败的异常,触发重新授权流程),避免因为一次调用失败导致后续令牌过期。
内容的提问来源于stack exchange,提问作者Konrad




