操作指南 · 开发者

如何在 Chrome DevTools 中解码 JWT 并查看过期时间

AuthRoam4 分钟阅读

简短回答

打开一个能从真实请求捕获令牌的 DevTools 面板,在本地解码 header、payload 和各项声明——iat 和 exp 渲染成可读日期,过期令牌会被标出。解码不等于验证:签名不做校验,面板也明说了这一点。一切都不出你的浏览器。

  1. 1

    在调用你 API 的标签页上打开 DevTools,切换到 AuthRoam 面板。

  2. 2

    操作页面让它发出请求,然后在列表里选中捕获到的令牌。

  3. 3

    读取解码后的 header(算法、类型)和以纯 JSON 呈现的 payload 声明。

  4. 4

    在声明表里查看 iat 和 exp 的可读日期,过期令牌会被标出。

  5. 5

    记住解码给不了什么:签名未经验证——信任判断应放在你的服务器上。

读 JWT 的常见做法,是把令牌从请求里复制出来,粘进某个在线解码网站。能用,但这等于把一枚有效凭证交给一个你无法掌控的网站。在 Chrome 里,整件事可以完全在本地完成:在 DevTools 里从真实请求捕获令牌,解码 header 和 payload,把过期时间读成真正的日期——令牌全程不出你的浏览器。

Chrome 里的 AuthRoam DevTools 面板正在解码捕获到的 JWT:header、payload,以及把签发与过期时间显示为日期的声明表
AuthRoam 的 DevTools 面板解码选中的 JWT——header、payload,还有一张把 iatexp 变成可读日期的声明表。

从真实请求捕获令牌

安装 AuthRoam,在与你的 API 通信的标签页上打开它的 DevTools 面板。它捕获页面实际发送的凭证——bearer 令牌、Cookie 凭证、JWT——请求发生时逐条列出。你解码的是线上真实传输的那枚令牌,而不是复制进表单、可能半路被截断的副本。

读取 header 和 payload

选中一枚捕获的令牌,它当场就被解码。header 显示算法和类型——比如 RS256JWT——payload 则把各项声明显示为纯 JSON:isssubaudiatexp。解码发生在你的浏览器里,令牌绝不会被发往任何解码服务。

把过期时间读成日期,而不是时间戳

expiat 是 Unix 时间戳,没有谁能一眼读懂 1783864440。声明表把两者都渲染成日期,已经失效的令牌会被标为过期。捕获列表在每枚令牌上以徽章带出同样的信息——“1 小时后”,或者它已经死了多久——于是一枚过期令牌,在你为一个根本不是代码问题的 401 排查二十分钟之前就已现形。

解码不等于验证

有一点必须说清楚:AuthRoam 只解码令牌,并验证签名——面板在声明下方也明说了。解码出的 payload 告诉你令牌声称了什么,而不是这些声称真实且未被篡改。验证需要签发方的密钥,属于你的服务器该做的事。对调试来说——缺哪个 scope、会话何时到期——解码正是你需要的;但对信任判断来说它不够格,任何客户端解码器都不该假装够格。

不透明令牌保持不透明

不是每枚 bearer 令牌都是 JWT。不透明的会话令牌没有可解码的 payload,AuthRoam 会把它标为 Opaque,而不是凭空捏造并不存在的结构。

一切留在本地

整个流程 100% 本地、零遥测:令牌的捕获、解码与存储只发生在你的浏览器里,连 Pro 许可也是本地验证,不会向服务器回传。

在捕获它们的地方解码 JWT

在 DevTools 里捕获令牌,在本地读取声明与过期时间——诚实解码,绝不上传。

了解 AuthRoam →