📜  jwt 编码 (1)

📅  最后修改于: 2023-12-03 14:43:37.761000             🧑  作者: Mango

JWT 编码

JWT(JSON Web Token)是一种用于身份验证的开放标准,它是基于 JSON 的轻量级协议。JWT 由三部分组成:header(头部)、payload(负载)和 signature(签名),它们三个之间用点号连接,组成一个完整的 JWT。

JWT 的组成
Header

JWT 的 Header 部分代表着该 JWT 的类型以及使用的算法。Header 通常由两部分信息组成:

{
  "alg": "HS256",
  "typ": "JWT"
}
  • alg:指定生成签名时使用的算法
  • typ:表示该 JWT 的类型,一般都是 JWT
Payload

JWT 的 Payload 部分包含了可读的信息,如用户身份、权限等信息。Payload 也是由 JSON 对象组成,它可以自定义任何属性,一般包含三类信息:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
  • sub:Subject,代表这个人或这个 JWT 的唯一标识,一般是用户 ID。
  • iat:Issued At,表示 JWT 的签发时间,一般使用 Unix 时间戳表示。
  • 其他自定义信息,比如 name 表示用户姓名。
Signature

JWT 的 Signature 部分是整个 JWT 的保护部分,它防止了 JWT 被篡改。Signature 使用 Base64 编码,它由三部分组成:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

其中:

  • header:Base64 编码的 Header 信息
  • payload:Base64 编码的 Payload 信息
  • secret:应用程序的密钥
JWT 的生成和验证

JWT 的生成和验证一般由应用程序的后端完成。应用程序生成 JWT 的流程如下:

  1. 应用程序在服务端生成 Header 和 Payload。
  2. 应用程序使用 Header、Payload 和应用程序的密钥,生成 Signature。
  3. 应用程序将生成的三部分合并成一个字符串,用点号连接起来,生成完整的 JWT。

JWT 的验证流程如下:

  1. 应用程序获得 JWT。
  2. 应用程序将 JWT 用点号分割成 Header、Payload 和 Signature。
  3. 应用程序使用同样的算法、密钥生成 Signature。
  4. 应用程序将生成的 Signature 与 JWT 中的 Signature 进行比较,如果一致则验证通过。
JWT 的优点
  1. 无状态:JWT 不需要在服务端存储令牌,因此可以轻松适用于分布式服务。
  2. 安全:使用 Signature 保护令牌,保证令牌不被篡改或伪造。
  3. 装载更多信息:由于 Payload 可以自由定义,因此可以在令牌中携带更多用户信息和权限信息,使得应用程序可以更好地处理用户请求。
总结

JWT 是一种轻量级身份验证协议,它由 Header、Payload 和 Signature 三部分组成。应用程序可以使用 JWT 签发认证令牌,用户在提交请求时,将令牌放在请求头中,服务端收到请求时,解析令牌即可判断用户身份和权限。JWT 的无状态、安全和可装载更多信息等优点使得它成为了一种全新的身份验证方式。