JWT(JSON Web Token)验证过程

通俗描述 JWT(JSON Web Token)的过程

JWT(JSON Web Token)是一种在网络应用中传递信息的方式,广泛用于 身份验证信息交换。它的核心思想是 通过令牌安全地传递信息,确保信息的 完整性保密性

JWT 的过程:

  1. 用户登录(身份验证)

    • 用户通过用户名和密码登录到服务器。
    • 服务器验证用户的身份。如果身份验证成功,服务器生成一个 JWT,这个令牌包含了用户的身份信息和一些附加的声明(如过期时间)。
  2. JWT 生成

    • JWT 由三部分组成:头部(Header)有效载荷(Payload)签名(Signature)
      • 头部(Header):指定令牌的类型(通常是“JWT”)和使用的签名算法(例如 HMAC SHA256)。
      • 有效载荷(Payload):包含用户的身份信息及其他数据,称为“声明(Claims)”。
      • 签名(Signature):为了确保令牌没有被篡改,服务器会用一个密钥和算法(如 HMAC SHA256)对头部和有效载荷进行加密生成签名。
  3. JWT 返回给用户

    • 服务器将生成的 JWT 返回给用户。用户将 JWT 存储在浏览器的 localStoragecookie 中。
  4. 用户发起请求

    • 用户在后续的请求中,将存储的 JWT 附加到 HTTP 请求的 Authorization 头中,格式为:
      Authorization: Bearer <JWT>
      
  5. 服务器验证 JWT

    • 服务器接收到请求后,首先从 HTTP 头中提取出 JWT。
    • 服务器通过解码 JWT,检查 签名,确保令牌没有被篡改。
      • 如果签名有效,服务器可以信任这个令牌,并读取其 有效载荷 中的数据(例如用户ID、角色等)。
      • 如果签名无效或令牌已过期,服务器将拒绝请求。
  6. 访问受保护资源

    • 如果 JWT 验证通过,服务器根据有效载荷中的信息,允许用户访问请求的资源。

JWT 的结构:

JWT 由三部分组成,使用点(.)连接:

header.payload.signature
  1. 头部(Header)
    头部指定了令牌的类型(通常是 "JWT")和所使用的签名算法(如 HMAC SHA256)。

    例如:

    {
      "alg": "HS256",
      "typ": "JWT"
    }
    
  2. 有效载荷(Payload)
    有效载荷包含了声明(Claims),如用户ID、角色、过期时间等。常见的声明有:

    • sub(主题):通常是用户的唯一标识符。
    • exp(过期时间):JWT 的过期时间,超过这个时间后 JWT 就不再有效。

    例如:

    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }
    
  3. 签名(Signature)
    使用 密钥(secret)和 算法(如 HMAC SHA256)对头部和有效载荷进行加密,生成签名。这确保了数据的完整性。

    生成签名的过程:

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

JWT 的优势:

  • 紧凑性:JWT 是 URL 安全的,并且体积小,适合在 HTTP 请求头中传输。
  • 自包含:JWT 包含了所有用户信息,服务器不需要存储会话数据,减少了服务器负担。
  • 安全性:JWT 通过签名确保数据未被篡改,并且可以加密确保数据的机密性。

总结:

JWT 通过签名确保数据的 完整性,通过加密确保数据的 机密性,并且广泛应用于 身份验证信息交换。它是一个轻量级的、跨平台的标准,适用于 Web 应用、微服务架构和其他分布式系统中。

posted @   牛马chen  阅读(53)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示