JWT 解码器
读懂令牌的声明,并证明它的签名 · 在此标签页内运行,从不发送到任何地方
令牌
签名
JWT 是编码,不是加密——任何拿到这个令牌的人,不需要密钥就能读到上面的全部内容。只有验证签名才能说明它是真的、没有被改动过。
声明
在「令牌」面板里粘贴一个令牌,它的声明就会用通俗的说法列在这里。
头部
负载
JWT 解码器 的工作原理
这个 JWT 解码器会把令牌拆成三个部分,解码头部和载荷,并把每一条声明用通俗的说法列出来——过期时间、生效时间和签发时间都显示为真实日期,而不是从 1970 年算起的秒数。它同样能验证签名:为 HS 系列算法粘贴共享密钥,或为 RS、PS、ES 系列粘贴公钥,校验就会在你自己浏览器的 WebCrypto 上执行。令牌和密钥都不会被上传,密钥甚至不会保存在这个浏览器里。
粘贴一个令牌——带不带 Bearer 前缀都可以——它会被拆成三个部分,并用颜色区分,让你看清每一段在哪里结束。头部和负载会被解码成 JSON,声明还会用通俗的说法再列一遍,其中 exp、nbf 和 iat 会显示为真实日期,并标出已经过去多久或者还有多久。
解码 JWT 不等于验证 JWT。 前两部分是 base64url,不是加密:任何拿到令牌的人都能读到,所以令牌永远不是存放机密的地方。打开验证签名,为 HS 系列算法粘贴共享密钥,或者为 RS、PS、ES 系列粘贴公钥,签名就会被真正验证——支持 HS256/384/512、RS256/384/512、PS256/384/512 和 ES256/384/512,使用浏览器自带的 WebCrypto。
你粘贴的密钥与本站其他任何输入都不同:它绝不会写入 localStorage,刷新后也不会被恢复。令牌和密钥都不会被上传,而且根本不存在能接收它们的服务器。
常见问题
把真实的 JWT 粘贴到这个解码器里安全吗?
安全。令牌由你自己标签页里的 JavaScript 解码,并不存在可以接收它的后端——断开网络,解码器照样能用。对 JWT 来说,这比对大多数数据更重要:令牌是一份有效的凭据,把它粘贴到会上传服务器的站点,等于把它所授予的一切都交了出去。
能解码是不是就说明令牌有效?
不是,而且这个区别很关键。头部和载荷是 base64url 编码,不是加密,任何拿到令牌的人都能读到——所以 JWT 永远不是存放机密的地方。只有用正确的密钥验证签名,才能说明令牌是真的、没有被改动过,其中的声明也才值得信任。
它能验证哪些签名算法?
使用共享密钥的 HS256、HS384 和 HS512,以及使用公钥的 RS256/384/512、PS256/384/512 和 ES256/384/512。公钥可以是 PEM 块、单个 JWK 或整个 JWKS——是 JWKS 时,由令牌的 kid 选出对应的密钥。验证使用浏览器内置的 WebCrypto,因此不会有任何密钥材料被发送出去。
我的签名密钥或共享密钥会被保存吗?
不会。本站其他工具都会把你的输入保存到 localStorage,以免刷新丢失进度;验证用的密钥被刻意排除在外。它只存在于内存中,用于这次校验,你离开页面它就消失了。
为什么我的令牌显示为已过期?
exp 声明是一个 NumericDate——从 1970 年算起的秒数——解码器会把它显示为真实日期,并标出它已经过去了多久。令牌过期是某个刚才还正常的 API 突然返回 401 的最常见原因。而一个位于未来的 nbf 声明,会在另一端造成同样的结果。