OAuth with Azure AD v2.0中expires_in为何不再是3599而是随机值?
相关现象说明与修复方案
你遇到的是Azure AD OAuth 2.0令牌接口的官方正常调整,已有大量开发者碰到完全相同的情况,不属于接口异常。
调整背景
- 微软于近期逐步全量上线了令牌有效期浮动策略,
expires_in返回值不再固定为3599秒(1小时差1秒),而是在3599秒~4320秒(72分钟)区间内随机生成,不同租户、不同请求的返回值都会存在差异,和你侧的请求参数配置无关。
自动化测试修复建议
你的测试逻辑本身不符合OAuth 2.0规范约定:RFC 6749标准从未要求expires_in必须返回固定值,所有依赖该字段为固定值的业务逻辑、测试用例都属于强耦合的错误实现,建议按以下规则调整:
- 移除硬编码断言
expires_in == 3599的逻辑,改为断言expires_in >= 3599 && expires_in <= 4320即可匹配微软当前的有效期规则 - 更严谨的实现方式是仅校验
expires_in为正整数,后续所有令牌过期判断完全依赖该字段的实际返回值,不与任何固定时长绑定
注意:微软后续仍有可能调整有效期的浮动区间,只要接口返回的
expires_in为正整数,都属于符合规范的正常返回,不要依赖该字段的具体固定值做逻辑判断。
内容的提问来源于stack exchange,提问作者James Foster
相关产品推荐
相关产品推荐

