303 字
2 分钟
JWT快速入门

什么是jwt#

Json Web Token,通过数字签名的方式,以json对象为载体,在不同的服务终端之间安全的传输信息

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VySWQiOjEyMywidXNlcm5hbWUiOiJhbGljZSJ9.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

它由三部分组成:

  1. Header(头部):说明用的加密算法,例如 HS256
  2. Payload(载荷):存放用户信息,比如 userId, role, exp
  3. Signature(签名):用密钥签名,确保数据没被篡改 格式就是: Header.Payload.Signature

使用#

假设你登录成功后,服务器生成一个 JWT:

Header:
{
"alg": "HS256",
"typ": "JWT"
}
Payload:
{
"userId": 123,
"username": "alice",
"exp": 1713207687
}

服务器用密钥生成签名,然后把整个 JWT 返回给前端,前端以后每次请求都带着它:

Authorization: Bearer <你的JWT>

服务器验证这个 Token,就知道你是谁,而且不需要查数据库

验证签名的过程是:

  1. 同样的密钥 和算法(比如 HS256)
  2. 对 Header.Payload 重新生成一遍签名
  3. 看是否和原来的 <Signature> 一样 如果一样,说明 token 没被篡改 如果不一样,说明 token 被伪造或篡改了

注意#

  • JWT 存在前端(通常放在 localStorage 或 cookie 中)
  • 不能存敏感信息(JWT 是明文可解码的)
  • 超时后需重新登录或刷新 token(配合 refresh token)
JWT快速入门
https://fuwari.vercel.app/posts/jwt/
作者
Lorem Ipsum
发布于
2024-06-01
许可协议
CC BY-NC-SA 4.0