jwt具体是什么

jwt具体是什么

JWT(JSON Web Token)认证方式是一种基于令牌的认证机制,广泛应用于前后端分离的系统中。它通过生成、传递和验证一个加密的令牌(Token),来实现用户身份认证和授权。

JWT 的基本结构

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

  1. Header(头部)
    • 包含令牌的类型(通常是 JWT)和签名算法(如 HMAC SHA256)。
json 复制代码
{
  "alg": "HS256",
  "typ": "JWT"
}
  1. Payload(载荷)
    • 包含声明信息(claims),用于存储用户信息或其他元数据。
    • Claims 可以分为三类:
      • Registered claims (已注册声明):如 iss(签发者)、exp(过期时间)、iat(签发时间)。
      • Public claims(公共声明):由开发者定义的公开信息,如用户 ID、角色。
      • Private claims(私有声明):应用内自定义的非公开信息。
json 复制代码
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022
}
  1. Signature(签名)
    • 用于验证数据完整性,防止数据被篡改。
    • 生成方式:将 Header 和 Payload 使用 Base64URL 编码后拼接起来,并用密钥和算法进行签名。
scss 复制代码
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

最终生成的 JWT 类似于以下格式:

复制代码
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT 认证的工作流程

  1. 用户登录
    • 用户使用用户名和密码登录,服务器验证通过后生成 JWT,并将其返回给客户端。
  1. 客户端存储 JWT
    • 客户端通常将 JWT 存储在本地存储(localStorage)或浏览器的 Cookie 中。
  1. 请求时携带 JWT
    • 客户端在每次请求时,将 JWT 添加到 HTTP 请求头中:
makefile 复制代码
Authorization: Bearer <JWT>
  1. 服务器验证 JWT
    • 服务器接收到请求后,解析 JWT,验证签名和有效期。
    • 如果验证通过,则允许访问资源;否则返回 401(未授权)。

JWT 认证的优点

  1. 跨平台:JWT 是 JSON 格式,可以被多种语言解析和使用。
  1. 无状态:JWT 是无状态的,服务器无需存储会话信息,减少了服务器压力。
  1. 灵活性:Payload 中可以存储多种类型的信息。

JWT 的缺点

  1. 安全性问题
    • 如果密钥泄露,攻击者可以伪造 JWT。
    • 如果令牌被截获,可能会被重用(可以通过 HTTPS 和短期有效期减轻此问题)。
  1. 无法主动注销
    • 由于 JWT 无需存储在服务器端,服务器无法主动使某个令牌失效,除非使用黑名单机制。
  1. 令牌大小较大
    • 包含了 Header、Payload 和 Signature,在每次请求中都会传输,可能增加网络负担。

JWT 的使用场景

  • 用户认证:前后端分离的登录认证。
  • 微服务通信:服务之间基于 JWT 进行身份验证。
  • 移动应用:使用 JWT 在移动端管理用户身份。

如需实现,推荐配合 Node.js 的 jsonwebtoken 库,方便快速生成和验证 JWT。

相关推荐
0思必得07 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5168 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino8 小时前
图片、文件的预览
前端·javascript
layman052810 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔10 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李10 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN10 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒10 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库10 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_1800790524710 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫