你有使用过JWT吗?说说你对它的理解

我理解 JWT (JSON Web Token) 作为前端开发中一个重要的授权和信息交换机制。它本质上是一个自包含的、安全的传输信息的方式,通常用于用户认证和授权。

前端使用 JWT 的主要流程如下:

  1. 用户登录: 用户提交凭据(例如用户名和密码)到后端服务器。
  2. 后端验证: 服务器验证凭据,如果有效,则创建一个 JWT。
  3. JWT 返回前端: 服务器将生成的 JWT 返回给前端,通常放在 Authorization header 中,使用 Bearer scheme,例如 Authorization: Bearer <token>
  4. 前端存储 JWT: 前端通常将 JWT 存储在 localStorage 或 sessionStorage 中。 localStorage 持久存储,除非手动清除,否则即使关闭浏览器 JWT 依然存在;sessionStorage 则在浏览器会话结束时清除。 Cookie 也可以用来存储 JWT,但需要注意安全性和跨域问题,需要设置合适的 HttpOnly, Secure, SameSite 属性。
  5. 后续请求: 前端在后续的每个请求中都将 JWT 附加到 Authorization header 中,发送到后端。
  6. 后端验证 JWT: 后端接收到请求后,会验证 JWT 的签名和有效期,确保其未被篡改且仍然有效。
  7. 授权访问: 如果 JWT 有效,后端允许访问受保护的资源。

JWT 的结构:

JWT 由三部分组成,用点号 (.) 分隔:

  • Header (头部): 包含 JWT 的类型和使用的哈希算法,例如:
    {
      "alg": "HS256",
      "typ": "JWT"
    }
    
  • Payload (有效载荷): 包含用户的信息和声明 (claims),例如用户 ID、角色、过期时间等。 这是 JWT 传输信息的核心部分。 需要注意的是,Payload 部分未加密,只是编码了,所以不要在其中存储敏感信息。
    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022,
      "exp": 1516249022
    }
    
  • Signature (签名): 用于验证 JWT 的完整性,确保 JWT 未被篡改。 签名是使用 Header 中指定的算法,对 Header 和 Payload 进行签名生成的。

前端开发中使用 JWT 的优势:

  • 无状态: 服务器不需要存储用户的会话信息,减轻了服务器的负担,也更容易实现水平扩展。
  • 跨域认证: JWT 可以轻松实现跨域认证,因为认证信息包含在 JWT 中。
  • 易于扩展: JWT 可以包含各种自定义的声明 (claims),方便扩展。

前端开发中使用 JWT 的注意事项:

  • 存储安全: 避免将 JWT 存储在易受 XSS 攻击的地方,例如 DOM 中。 推荐使用 HttpOnly cookie 或 Web Storage,并设置合适的 SameSite 属性。
  • 过期时间: 设置合适的过期时间,以平衡安全性和用户体验。
  • 刷新机制: 实现 JWT 的刷新机制,以便用户在 JWT 过期后可以继续访问受保护的资源,通常使用 refresh token 机制。

总而言之,JWT 为前端开发提供了一种安全、高效的用户认证和授权机制,理解其工作原理和最佳实践对于构建安全的 Web 应用至关重要。 在实际应用中,可以借助一些 JWT 的库来简化 JWT 的创建、解析和验证过程。

posted @   王铁柱6  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示