CoderTools

JWT编解码器

解码后的JWT

头部


                    

载荷


                    

签名


                    

什么是JWT?

JSON Web Token (JWT)

JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON对象的形式安全地传输信息。此信息可以被验证和信任,因为它是经过数字签名的。JWT可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。

JWT结构

JWT由三个部分组成,用点(.)分隔,它们是:

xxxxx.yyyyy.zzzzz
  • 头部 : 包含令牌类型(JWT)和签名算法(例如HS256、RS256)
  • 载荷 : 包含声明 - 关于实体(通常是用户)和其他数据的语句
  • 签名 : 用于验证JWT的发送者就是它所声称的那个人,并确保消息在传输过程中没有被更改

签名算法

JWT支持多种签名算法:

  • HS256: HMAC使用SHA-256。使用共享密钥的对称算法
  • HS384: HMAC使用SHA-384。使用更强哈希的对称算法
  • HS512: HMAC使用SHA-512。使用最强哈希的对称算法
  • RS256: RSA签名使用SHA-256。使用公钥/私钥对的非对称算法
  • RS384: RSA签名使用SHA-384。使用更强哈希的非对称算法
  • RS512: RSA签名使用SHA-512。使用最强哈希的非对称算法

标准声明

JWT定义了几个标准声明(注册的声明名称),提供有用的信息:

  • iss (Issuer): 令牌颁发者
  • sub (Subject): 令牌的主题(用户ID)
  • aud (Audience): 预期的受众
  • exp (Expiration Time): 过期时间(Unix时间戳)
  • nbf (Not Before): 生效时间
  • iat (Issued At): 签发时间
  • jti (JWT ID): 令牌的唯一标识符

常见用例

  • 认证:用户登录后,每个后续请求都包含JWT,允许访问路由、服务和资源
  • 信息交换:通过签名验证安全地在各方之间传输信息
  • 单点登录(SSO):由于开销小且跨域能力强,广泛用于SSO功能
  • API授权:RESTful API的无状态认证
  • OAuth 2.0和OpenID Connect:现代认证协议的核心组件

安全提示: JWT令牌经过签名以验证真实性,但默认情况下不加密。除非单独加密,否则不要在载荷中存储敏感信息。始终使用HTTPS传输令牌。安全存储令牌(例如,Web应用程序使用httpOnly cookie)。实施适当的令牌过期和刷新机制。永远不要在客户端代码中暴露您的密钥。

参考资料