当前位置: 首页 > news >正文

JWT生成的token的构成部分

JWT(JSON Web Token)生成的Token由三部分组成:​​头部(Header)​​、​​载荷(Payload)​​和​​签名(Signature)​​,各部分通过英文句点.连接。以下是具体内容及作用解析:


​1. 头部(Header)​

  • ​作用​​:声明Token类型和签名算法。
  • ​内容​​:
    • typ:固定为"JWT",表示Token类型。
    • alg:签名算法,如HS256(HMAC SHA256)、RS256(RSA SHA256)等。
  • ​编码方式​​:JSON对象通过Base64URL编码为字符串,例如:
    {"alg": "HS256", "typ": "JWT"}  // 编码后:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

​2. 载荷(Payload)​

  • ​作用​​:携带用户信息及声明(Claims),包括标准字段和自定义数据。
  • ​内容​​:
    • ​标准声明(官方建议但不强制使用)​​:
      • iss(Issuer):签发者(如服务端域名)。
      • sub(Subject):主题(如用户ID)。
      • aud(Audience):接收方(如客户端应用ID)。
      • exp(Expiration Time):Token过期时间(Unix时间戳)。
      • nbf(Not Before):生效时间。
      • iat(Issued At):签发时间。
      • jti(JWT ID):唯一标识。
    • ​自定义声明​​:开发者可添加业务相关字段,如用户角色、权限、用户名等。例如:
      {"userId": 123, "role": "admin"}  // 编码后:eyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIn0
  • ​编码方式​​:JSON对象通过Base64URL编码,但​​不加密​​(明文可见)。

​3. 签名(Signature)​

  • ​作用​​:验证Token完整性和真实性,防止篡改。
  • ​生成方式​​:
    1. 拼接编码后的Header和Payload:base64UrlEncode(Header) + "." + base64UrlEncode(Payload)
    2. 使用Header中声明的算法(如HS256)和服务器端密钥(Secret Key)加密生成签名。
    // 示例:使用HMAC SHA256生成签名
    signature = HMACSHA256(headerBase64 + "." + payloadBase64, secretKey);
  • ​验证方式​​:服务端用相同算法和密钥重新计算签名,与Token中的签名比对是否一致。

​完整Token示例​

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIiwiaWF0IjoxNzM1NDc4MDA1fQ.GromRG7kK90UfU_Q5iOSHs_xE-zSk0e0HLHqJQUjYMU
  • ​分解​​:
    • 头部:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9(解码后为{"alg":"HS256","typ":"JWT"})。
    • 载荷:eyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIiwiaWF0IjoxNzM1NDc4MDA1fQ(解码后包含用户ID、角色、签发时间)。
    • 签名:GromRG7kK90UfU_Q5iOSHs_xE-zSk0e0HLHqJQUjYMU

​注意事项​

  1. ​敏感信息​​:Payload内容未加密,避免存储密码等敏感数据。
  2. ​有效期​​:通过exp字段控制Token过期时间,建议设置较短的有效期(如2小时)。
  3. ​密钥安全​​:签名密钥(Secret Key)必须严格保密,泄露将导致Token可被伪造。

如需生成或验证JWT,可使用工具库如Java的JWTUtil(Hutool)、Node.js的jsonwebtoken或Python的PyJWT

相关文章:

  • 5.Java 面向对象编程入门:类与对象的创建和使用​
  • 【C++】深入理解C++中的函数与运算符重载
  • Android中获取控件尺寸进阶方案
  • vocabulary in code
  • SMT贴片机操作核心步骤精要
  • Selenium自动化测试网页加载太慢如何解决?
  • 《企业级日志该怎么打?Java日志规范、分层设计与埋点实践》
  • 静态分配动态绑定
  • 由数据范围反推目标算法
  • Maven 中央仓库操作指南
  • maven 3.0多线程编译提高编译速度
  • Adminer 连接mssql sqlserver
  • ARM笔记-ARM伪指令及编程基础
  • RabbitMQ 快速上手
  • 在STM32上配置图像处理库
  • OAuth2.0专项测试详解
  • 自动生成图标小程序(iOS)
  • 【TCP/IP协议族详解】
  • Vue3响应式数据: 深入分析Ref与Reactive
  • 从零开始:Python语言进阶之异常处理
  • 浙江做网站找谁/网络营销大赛策划书
  • 学校网站建设用哪个系统/健康码防疫核验一体机
  • 舟山网站建设开发/微信营销的成功案例
  • 怎么做免费的公司网站/优化一下
  • 苏州新区网站制作/seo数据优化教程
  • 免费b2b网站大全免费黄页大灰狼/推广普通话文字素材