JWT 解码与验证器
固定到你的工具解码 JSON Web Token,检查有效期和声明,并用密钥或公钥验证签名。
完全在你的浏览器中运行。你输入的内容绝不会发送到我们的服务器。
令牌
粘贴打开文件Ctrl O清空
载荷
载荷
下载复制Ctrl Shift C
HS256/384/512 使用密钥;其他算法使用 PEM(SPKI 或证书)格式的公钥,或 JWK / JWKS(按令牌的 kid 选择密钥)。密钥绝不会被分享或保存。
历史记录 · 0
处理过的输入会在此页面打开期间显示在这里。重新加载页面会清空列表。
代码示例
可直接复制到你自己的项目中。每个示例只使用该语言的标准库,因此无需安装任何东西。
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
const payload = token.split('.')[1]
const json = Buffer.from(payload, 'base64url').toString('utf8')
console.log(JSON.stringify(JSON.parse(json), null, 2))它能做什么
解码 JSON Web Token 来读取它的头部和载荷,查看它是否已过期,并用密钥或公钥验证它的签名。令牌在你的浏览器中解码,本页不显示广告,令牌和密钥绝不会被分享或保存。
如何使用
- 粘贴令牌。开头的
Bearer前缀和换行符会被忽略。 - 以格式化或紧凑的 JSON 阅读载荷。载荷下方是算法、状态,以及
exp、nbf和iat的时间,旁边显示它们与现在相差多久。 - 要验证签名,请输入密钥:HS256、HS384 和 HS512 使用密钥(secret),RS、PS、ES 和 EdDSA 使用公钥(PEM 或 JWK)。
- 可以在 JSON 与声明之间切换头部和负载:声明视图会列出每个声明及其含义,并把时间类声明显示为日期。
- 打开编码标签页,可以编写头部和负载,并用密钥或私钥(PKCS#8 PEM 或 JWK)签署。该标签页上的内容不会被保存、分享或加入历史记录。
示例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
该令牌的载荷:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
它的签名可以用密钥 your-256-bit-secret 验证通过。
须知
- 解码不等于验证:载荷只是被编码,并没有加密,任何人都能读取。
- 你的服务器必须先验证签名,才能信任任何声明。
- 算法为
none的令牌没有签名,所以任何人都可能伪造它。 - 请把真实令牌当作密码对待。在这里粘贴时,尽量使用已过期的或测试用的令牌。
- 粘贴的 JWKS 会按令牌的
kid查找密钥,单个 JWK 则直接使用。本页面绝不会向令牌的签发者获取密钥集。 - 比其哈希更短的 HMAC 密钥(32、48 或 64 字节)容易被猜出,因此页面会提醒你。密钥可按 UTF-8 文本或 Base64URL 读取。
什么是 JWT?
JSON Web Token 由用点连接的三段 Base64URL 组成:说明签名算法的头部、包含声明(如令牌面向谁、何时过期)的载荷,以及签名。前两段任何人都能读取;只有签名能证明令牌来自持有密钥的人。
常见问题
解码令牌就等于验证吗?
不等于。解码只是读取未加密的内容。验证是用密钥检查签名,你的服务器在信任任何声明之前必须先做这一步。
exp、nbf 和 iat 是什么意思?
exp 是令牌过期的时间,nbf 是在此之前无效的时间,iat 是签发时间,都是自 1970 年起的秒数。本工具会把它们与你设备的时钟比较。
在这里粘贴真实令牌安全吗?
令牌在你的浏览器中解码,绝不会发送到我们的服务器,本页也不显示广告。不过仍应像对待密码一样对待有效令牌:最好使用已过期或测试用的令牌。