JWT 笔记自留

1. JWT 是什么

JWT(JSON Web Token)是一种 轻量级的认证与授权机制,常用于前后端分离系统中用户身份的安全传递。它通过数字签名保证 Token 的完整性和不可篡改性。


2. JWT 的结构

JWT 由三部分组成,用 . 分隔:

 

Header.Payload.Signature

  • Header(头部)

    • 说明使用的算法与 Token 类型

    • 例如:{"alg": "HS256", "typ": "JWT"}

  • Payload(负载)

    • 携带用户相关数据(claims,声明)

    • 常见字段:

      • iss:签发者

      • sub:用户标识

      • exp:过期时间(Unix 时间戳)

      • iat:签发时间

    • ⚠️ 注意:Payload 是 明文可解码的,所以不要存放敏感信息。

  • Signature(签名)

    • 防止数据被篡改

    • 计算公式:

       

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


3. JWT 的签发流程

  1. 用户登录(提交账号密码)

  2. 服务端验证成功后,根据用户信息生成 Header + Payload

  3. 使用服务端的密钥对前两部分签名,生成 Signature

  4. 拼接成最终的 JWT 返回给客户端

  5. 客户端存储(一般放在 LocalStorage 或 HTTP Header 中)


4. JWT 的验证流程

  1. 客户端携带 JWT(一般放在请求头 Authorization: Bearer <token>

  2. 服务端接收 Token 后拆分成三部分:HeaderPayloadSignature

  3. 服务端使用相同的算法和 secretKey 对前两部分重新计算 Signature

  4. 对比客户端传来的 Signature 和服务端重新计算的签名:

    • 一致 → 说明 Token 未被篡改

    • 不一致 → 拒绝请求(Token 可能被伪造)

  5. 校验 Payload 中的时间字段(如 exp 是否过期)


5. 如何检测 Token 是否有效

  • 签名验证:服务端重新计算 Signature 并对比

  • 过期检测:检查 Payload 中的 exp

  • 黑名单机制(可选):

    • 某些场景下(如用户主动注销、修改密码),即使 Token 未过期也需要立即失效

    • 可以将失效 Token 存入 Redis 黑名单,校验时查询


6. 常见问题与注意事项

  • 明文问题:Payload 可以解码 → 不要放敏感信息

  • 时效性:尽量设置合理的过期时间 exp

  • 刷新机制

    • 短期 Token + Refresh Token 机制

    • 避免长期有效 Token 被盗用

  • 存储方式

    • 推荐存储在 HTTP Only Cookie(防止 XSS 攻击)

    • 或 LocalStorage(需要额外防御 XSS)


7. 面试答法(简洁版)

👉 面试官问「JWT 是如何验证 Token 是否有效的?」可以这样答:

JWT 由三部分组成:Header、Payload、Signature。服务端不会存储 Token,而是通过 签名校验来验证。
当客户端请求时,服务端会拿到 Token,重新用密钥对 Header+Payload 计算签名,然后和 Token 中的 Signature 对比,如果一致说明没有被篡改;再检查 Payload 里的过期时间 exp 等字段,确认 Token 是否还有效。如果需要即时失效,可以用 Redis 黑名单机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值