JWT编解码器
安全地解码、验证和生成JWT令牌
解码后的JWT
头部
载荷
签名
头部
载荷
以JSON格式输入您的载荷数据
密钥
此密钥用于签名JWT。请妥善保管!
生成的JWT
JSON Web Tokens (JWT) 权威指南
什么是 JWT (JSON Web Token)?
JSON Web Token (JWT) 是一个开放标准 (RFC 7519),定义了一种紧凑且自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。这些信息可以被验证和信任,因为它们经过了数字签名。JWT 可以使用密钥(HMAC 算法)或公钥/私钥对(RSA 或 ECDSA)进行签名。由于采用了 Base64Url 编码,物体积小,可以通过 URL、POST 参数或 HTTP 头部发送。
JWT 的结构
一个 JWT 技术上由三部分组成,用点 (.) 分隔,分别是:
- 头部 (Header) : 头部通常由两部分组成:令牌的类型 (即 JWT) 和所使用的签名算法,例如 HMAC SHA256 或 RSA。
- 载荷 (Payload) : 载荷包含声明 (Claims)。声明是关于实体(通常是用户)和其他数据的陈述。声明有三种类型:注册的、公开的和私有的声明。
- 签名 (Signature) : 要创建签名部分,您必须获取编码后的头部、编码后的载荷、一个密钥、头部中指定的算法,并对其进行签名。签名用于验证消息在传输过程中未被更改。
支持的算法
本工具支持解码和验证所有标准算法,以及生成对称加密算法的令牌:
- HS256: HS256 (HMAC SHA-256): 对称加密。需要共享密钥。速度快,常用于微服务。
- HS384: HS384 (HMAC SHA-384): 对称加密。使用 384 位哈希,抗碰撞性更高。
- HS512: HS512 (HMAC SHA-512): 对称加密。使用 512 位哈希。对称签名中最安全的。
- RS256: RS256 (RSA SHA-256): 非对称加密。使用私钥签名,公钥验证。非常适合公共 API。
- RS384: RS384 (RSA SHA-384): 非对称加密。比 RS256 哈希更强。
- RS512: RS512 (RSA SHA-512): 非对称加密。RSA 签名的最高安全级别。
理解 JWT 声明 (Claims)
声明是关于主体的断言信息。标准的注册声明包括:
- iss (Issuer): iss (Issuer): 签发人,标识颁发 JWT 的实体。
- sub (Subject): sub (Subject): 主体,标识 JWT 所面向的用户或实体。
- aud (Audience): aud (Audience): 受众,标识 JWT 预期的接收者。
- exp (Expiration Time): exp (Expiration Time): 过期时间,标识 JWT 不再被接受的时间点。
- nbf (Not Before): nbf (Not Before): 生效时间,标识在此时间之前 JWT 不可被接受。
- iat (Issued At): iat (Issued At): 签发时间,标识 JWT 生成的时间。
- jti (JWT ID): jti (JWT ID): 唯一标识符,用于标识特定的 JWT。
何时使用 JWT?
- 授权 (Authorization): 这是最常见的场景。用户登录后,后续的每个请求都会包含 JWT,允许用户访问该令牌许可的路由、服务和资源。
- 信息交换: JWT 是在各方之间安全传输信息的好方法。因为 JWT 可以被签名,您可以确信发送者是他们所声称的人。
- 无状态会话: 与服务器端会话不同,JWT 包含所有必要的用户数据,减少了数据库查询会话的压力。
- 跨域单点登录 (SSO): 因为 JWT 是无状态且紧凑的,非常易于在不同域之间传递以实现 SSO。
- API 安全: 保护 RESTful API,服务器无需维护会话状态。
关键安全最佳实践: 1. 此时把敏感数据(如密码)放入载荷中;它是可被任何人读取的(Base64 解码)。2. 始终检查签名。3. 使用 'exp'(过期)声明限制令牌寿命。4. 使用 HTTPS 防止令牌被拦截。5. 安全存储令牌(推荐使用 HttpOnly Cookie 而非 LocalStorage 以防止 XSS 攻击)。
常见问题 (FAQ)
JWT 是加密还是编码?
标准的 JWT 是经过编码和签名的,而不是加密的。载荷中的数据是 Base64Url 编码的,这意味着任何人都可以解码并读取它。签名确保数据未被篡改,但不会隐藏数据。如果需要隐藏数据,您需要使用 JWE (JSON Web Encryption)。
客户端应该把 JWT 存在哪里?
对于 Web 应用,通常认为将 JWT 存储在 `HttpOnly` Cookie 中比 `localStorage` 更安全,因为 Cookie 对跨站脚本 (XSS) 攻击免疫。但是,Cookie 容易受到 CSRF 攻击,需要单独防御。
如果不慎泄露了 JWT 会怎样?
如果 JWT 被盗,窃贼可以在令牌过期前冒充用户。这就是为什么必须使用较短的过期时间 (`exp`) 并实施令牌撤销策略(如黑名单 jti)或使用带有轮换机制的刷新令牌。
此工具会将我的密钥发送到服务器吗?
不会。此工具完全在客户端运行。您的私钥、密钥和令牌数据永远不会离开您的浏览器。所有加密操作均使用 JavaScript 库在本地执行。
我可以手动修改载荷吗?
您可以在本地修改载荷部分,但这样做会导致基于原始密钥的签名失效。除非您用正确的密钥/私钥重新签名,否则服务器将拒绝该令牌。
HS256 和 RS256 有什么区别?
HS256 是对称算法(签名和验证使用同一个共享密钥)。RS256 是非对称算法(使用私钥签名,使用公钥验证)。RS256 更适合分布式系统,其中许多服务需要验证令牌但不能生成令牌。