exp
当前时刻必须早于 exp。到达 exp 的那一刻就已经过期,可按策略加入少量 leeway。
JWT / NUMERICDATE
以当前时刻或自定义时刻检查 JWT 的过期、生效和签发时间。JWT NumericDate 的单位是从 Unix Epoch 起算的秒,不是常见 JavaScript 毫秒时间戳。
当前时刻必须早于 exp。到达 exp 的那一刻就已经过期,可按策略加入少量 leeway。
当前时刻在 nbf 之前时不可接受。leeway 只用于容忍小幅时钟偏差。
表示签发时刻,本身不是自动拒绝规则;未来 iat 或异常长生命周期应复核。
请选择有效的日期和时间。
COMMON TIME BUGS
Date.now() 返回毫秒,JWT NumericDate 使用秒。应先除以 1000,再按策略取整。
iat 只记录签发时刻。是否限制最大年龄、是否拒绝未来 iat,需要由具体应用明确规定。
攻击者可以直接改写 Payload 中的 exp。必须先验签,再用可信服务器时间检查 Claims。
RELATED TOOLS
USE & REVIEW
算。规范要求当前时间必须早于 exp,因此参考时刻到达 exp 就不能再接受。页面使用“reference >= exp + leeway”判断过期;leeway 为 0 时不会额外宽限。不同库的取整方式可能影响亚秒边界,生产端应统一时钟、单位和测试案例。
它只用于容忍分布式服务器之间很小的时钟偏差,常见策略是数秒到一两分钟,具体取决于基础设施。不要用几小时或几天的 leeway 掩盖错误过期时间,否则实际有效期会被偷偷拉长。签发方和验证方还应使用可靠时间同步,并记录拒绝原因。
不一定。iat 表示签发时刻,规范没有规定所有实现必须因未来 iat 自动拒绝。它可能来自时钟偏差,也可能是错误或伪造数据。页面把未来 iat 标为警告;若业务要限制最大 Token 年龄或拒绝未来签发,应在服务端明确策略,并在验签后执行。
当前 Unix 毫秒通常是 13 位,而 JWT NumericDate 使用秒,通常约 10 位。把 Date.now() 原样写进 exp 会把过期时间推到极远未来,甚至超出日期库范围。页面不会擅自除以 1000 修正,因为远期秒数也可能是有意输入,只会提示你核对单位。
因为攻击者可以直接改写未验证 Payload 里的 exp、nbf 和 iat。时间检查只回答这些数字相对参考时刻是否满足条件,不能证明它们是谁写的。正确顺序是先按固定算法验证签名,再检查 issuer、audience、时间、权限和撤销状态。
不会。结构解析、参考时间比较、leeway、生命周期和 JSON 报告都在当前浏览器完成。自定义时刻按浏览器本地时区解释,报告则使用 ISO UTC 保存参考时刻。生产 Token 仍应优先脱敏,因为下载报告、剪贴板和截图可能被另行保存或分享。