Skip to content

Latest commit

 

History

History
36 lines (24 loc) · 2.18 KB

jwt.md

File metadata and controls

36 lines (24 loc) · 2.18 KB
title date
JWT
2020-06-10 09:01:15 -0700

https://jwt.io/

组成

Header.Payload.Signature

  • Header: 头部通常由两部分组成,即令牌的类型(typ)和所使用的算法(alg)。例如,一个头部可能是 {"alg": "HS256", "typ": "JWT"},表示使用 HMAC SHA-256 算法对令牌进行签名。
  • Payload: 载荷包含了 JWT 的声明信息,用于描述令牌的相关内容。比如可以存储一些用户的基本信息。
  • Signature: 签名用于验证令牌的完整性和真实性。签名通常由头部、载荷和密钥一起计算而得。

优缺点

JWT 的优点

  • 无状态性:JWT 是无状态的,服务器不需要在后端存储会话信息,减轻了服务器负担。
  • 安全性:JWT  使用签名来验证令牌的真实性,防止了篡改和伪造。
  • 可扩展性:JWT  可以通过在  Payload  中添加自定义的声明来传递任意数据,实现了更多的功能。
  • 跨语言:JWT 是一种跨语言的标准,因为它使用  JSON  格式作为数据载体,并且它的标准规范是语言无关的。这意味着无论使用哪种编程语言编写的应用程序,都可以轻松地生成和解析  JWT。

JWT 的缺点

  • 无法撤销令牌:一旦颁发了  JWT,就无法在令牌的有效期内撤销它。即使用户的权限发生变化或者令牌被泄露,令牌也仍然有效,直到过期时间到期为止。
  • 安全性依赖于签名算法:JWT  的安全性取决于签名算法的强度。如果使用了弱算法或者密钥管理不当,可能会导致签名被破解,从而使得  JWT  变得不安全。
  • 无法处理令牌刷新:JWT  本身不提供令牌刷新功能,需要额外的机制来实现。这使得在令牌到期后,客户端需要重新进行身份验证,可能会增加一定的复杂性。
  • 不适合存储敏感信息:JWT  虽然可以对  Payload  进行加密,但是加密后的  Payload  仍然可以被解析出来。因此,不建议在  JWT  中存储敏感信息,如密码等。

如何撤销 JWT

通常和后端协同 RefreshToken 来主动刷新令牌权限