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

如何获取Azure AD access_token过期日期?解决JWT负载转义问题

问题解决思路

1. 引号转义问题:并非Azure AD的JWT存在格式问题

你看到的负载引号被转义,是解码工具的输出格式问题,Azure AD生成的Access Token完全符合JWT标准,负载本身是无转义的合法JSON结构。

  • 解决办法:不要依赖带转义的工具输出,直接用对应编程语言的标准JWT库解析(比如Node.js用jsonwebtoken、Java用JJWT、C#用System.IdentityModel.Tokens.Jwt),这些库会直接返回结构化对象,自动完成JSON解析,不会出现转义字符。
  • 若必须用工具验证,可编写本地JWT解析脚本,或对工具输出的内容做一次JSON反序列化处理,就能得到正常的负载结构。

2. 获取Access Token过期时间的最优方式

方式一:直接解析Access Token的exp字段

这是最可靠的方式,exp是JWT负载中的绝对时间戳(Unix秒级时间),只要正确解析JWT就能拿到。本地解析+验证签名的性能极高,完全无需每次调用UserInfo端点:

  • 验证签名逻辑:从Azure AD的密钥端点获取公钥(可本地缓存公钥,无需每次请求),本地验证Token的签名合法性,同时检查aud(受众是否匹配你的API)、exp(是否过期)、nbf(是否生效)等字段,整个过程均为本地操作,速度极快。

方式二:利用Token响应中的expires_in字段

客户端从Azure AD获取Token时,响应体里会包含expires_in字段(表示Token的有效期秒数),客户端可以用当前时间加上这个秒数,计算出Token的过期时间,再在请求API时将该时间传递(比如放在请求头中)。不过这种方式存在微小的时间误差风险,可靠性略低于直接解析exp字段。

3. API会话令牌的优化方案

不建议自行生成会话Cookie,更高效的做法是:

  • API首次接收Access Token时,完成本地签名验证+字段校验,然后将Token的哈希值(或唯一标识)与exp时间缓存(比如用Redis)。
  • 后续请求携带相同Access Token时,先检查缓存:若缓存未过期,直接通过授权;若缓存过期,再重新执行签名验证和字段校验,更新缓存。
  • 这种方式既避免了每次调用UserInfo,也无需自行维护会话生命周期,完全依托Access Token本身的有效期。

4. 关于Azure AD的JWT标准性

Azure AD生成的Access Token(无论v1还是v2端点)严格遵循JWT规范,负载是标准JSON格式,不存在内置转义字符。你遇到的转义问题完全是解码工具的输出处理导致的,与Azure AD无关。

内容的提问来源于stack exchange,提问作者AndrewS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:50:28