0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
配置
使用 HS256、HS384、HS512、RS256 和 RS512 算法生成和解码 JSON Web Token (JWT)。在 生成 模式下,填写 JSON 负载和秘钥以创建令牌。在 读取 模式下,粘贴现有令牌以检查其头部、负载并验证签名。

HMAC 使用 SHA-256。共享对称密钥。推荐用于一般用途。

密码
输入

工作原理

JSON Web Token(JWT)是一种紧凑的已签名令牌,在两方之间传递信息(声明)。它由用点分隔的三部分组成——头部、载荷和签名——,每部分都以 Base64URL 编码。

在生成模式下,你用 JSON 定义头部和载荷,并用密钥(HMAC)或私钥(RSA/ECDSA)签名。在读取模式下,你粘贴现有令牌以检查其内容并验证签名。

载荷未加密:任何人都能通过解码 Base64URL 读取它。签名仅保证令牌未被更改,并不会隐藏它。切勿在 JWT 中放置敏感数据。

示例

header{"alg":"HS256","typ":"JWT"} → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
payload{"sub":"1234567890","name":"John Doe","iat":1516239022} → eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
tokeneyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c签名(第三部分)取决于算法和密钥;此示例使用 HS256 和密钥 "your-256-bit-secret"。

使用场景

  • 在 API 中认证用户:服务器签发已签名的令牌,并在每个请求中验证它,而无需保存会话。
  • 检查和调试认证令牌,查看其声明(sub、exp、角色)和日期。
  • 用密钥或公钥验证令牌的签名,以确认它未被篡改。
  • 在开发认证流程时,使用不同算法(HMAC、RSA、ECDSA)生成测试令牌。

常见问题

JWT 的内容是加密的吗?

不是。头部和载荷只是经过 Base64URL 编码,任何人都能解码。签名保证的是完整性(未被更改),而非机密性。

HS256 和 RS256 有什么区别?

HS256 使用单一共享密钥进行签名和验证(HMAC)。RS256 是非对称的:用私钥签名、用公钥验证,适合许多服务需要验证但无需签发的场景。

iat、exp 和 nbf 声明是什么意思?

它们是标准时间戳:iat(签发时间)、exp(过期时间)和 nbf(在此之前无效)。以自 1970 年起的秒数表示(Unix 纪元)。

为什么不建议使用 "none" 算法?

因为它会生成未签名的令牌:任何人都可以修改载荷,而令牌仍会被接受。它只适合测试,绝不能用于生产。

我的令牌会发送到服务器吗?

不会。生成、解码和验证全部在你的浏览器中完成;令牌和密钥绝不会离开你的设备。