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

JWT(Java Web Token)字符串的组成结构介绍

目录

0.相关文章(实际运用)

1. 头部(Header)

2. 负载(Payload)

3. 签名(Signature)

完整的 JWT 字符串示例

总结与关键点


=======================

超级简介

头部.负载.签名

=======================文章开始

0.相关文章(实际运用)

======

使用 javax.net.ssl.HttpsURLConnection 发送 HTTP 请求__以及为了JWT通信选用OSS的Jar的【坑】__以及(WebSphere)【证明书】相关内容说明-CSDN博客

======

1. 头部(Header)

头部通常是一个 JSON 对象,它描述了关于该 JWT 的最基本的信息,例如其类型以及所使用的签名或加密算法。

  • 作用: 声明令牌的类型和使用的算法。

  • 内容示例

    json

    {"alg": "HS256","typ": "JWT"
    }
    • alg (algorithm): 表示签名的算法,例如 HS256(HMAC SHA-256)或 RS256(RSA SHA-256)。这是必选字段。

    • typ (type): 表示令牌的类型,这里当然是 JWT。有时还会有 cty (content type) 等其它字段。

这个 JSON 对象会经过 Base64Url 编码,形成 JWT 的第一部分。


2. 负载(Payload)

负载部分包含了所要传递的“声明”(Claims)。声明是关于实体(通常是用户)和附加元数据的语句。声明分为三种类型:

  • 作用: 携带需要传递的实际信息。

  • 内容类型

    1. 已注册的声明(Registered Claims): 预定义的一组标准声明,建议但不强制使用。它们通常有通用的含义:

      • iss (issuer): 签发者

      • sub (subject): 主题(用户ID等)

      • aud (audience): 受众(接收该JWT的一方)

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

      • nbf (not before): 生效时间(在此之前不可用)

      • iat (issued at): 签发时间

      • jti (JWT ID): 令牌的唯一标识,用于防止重放攻击

    2. 公共的声明(Public Claims): 可以由使用 JWT 的人员随意定义。但为了避免冲突,应在 IANA JSON Web Token Registry 中定义或使用一个包含抗冲突命名空间的名称。

    3. 私有的声明(Private Claims): 在提供者和消费者之间共同约定的自定义声明,用于共享信息,既不是已注册声明也不是公共声明。

    示例 Payload:

    json

    {"sub": "1234567890","name": "John Doe","iat": 1516239022,"admin": true
    }

    这个 JSON 对象同样会经过 Base64Url 编码,形成 JWT 的第二部分。

⚠️ 重要提示: 虽然负载可以被解码(Base64Url解码),但它默认是不加密的。任何人拿到令牌后都可以解码看到负载内容。因此,绝对不要在 JWT 的负载或头部中放置敏感信息(如密码)。如果需要保密,应使用加密的 JWT(JWE)。


3. 签名(Signature)

签名部分是整个 JWT 最关键的部分,用于验证消息在传递过程中没有被篡改,并且(在使用非对称加密时)可以验证发送方的身份。

  • 作用: 验证令牌的完整性和真实性。

  • 生成方式: 将编码后的头部、编码后的负载、以及一个密钥(secret) 通过头部指定的算法(如 HS256)进行签名。
    签名 = 算法(encodedHeader + '.' + encodedPayload, secret)

    • 例如,使用 HMAC SHA256 算法的签名是这样产生的:

      java

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

签名生成后,也会进行 Base64Url 编码,最终形成 JWT 的第三部分。


完整的 JWT 字符串示例

将上述三个部分组合起来,就形成了一个完整的 JWT:

1. 编码后的 Header:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

2. 编码后的 Payload:
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

3. 使用密钥 your-256-bit-secret 生成的 Signature:
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

最终的 JWT:

text

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

你可以将这个令牌粘贴到 jwt.io 的调试器中,直观地看到它的解码结果。

总结与关键点

部分内容是否加密作用
Header元数据(算法、类型)(仅Base64Url编码)声明如何验证签名
Payload需要传递的数据(声明)(仅Base64Url编码)携带实际信息
Signature对前两部分的签名N/A验证完整性,防止篡改
  • 完整性验证: 接收方收到 JWT 后,会用同样的算法和密钥对前两部分重新计算签名。如果计算结果与第三部分不匹配,说明令牌被篡改或无效,应立即拒绝。

  • 安全性: JWT 的安全性完全依赖于签名和密钥的保密性。如果签名密钥泄露,攻击者可以伪造任何令牌。

  • 不是加密: 标准的 JWT(JWS)是签名而不是加密。它保证数据不被篡改,但不保证数据不被他人看见。如需保密,请使用 JWE(JSON Web Encryption)。


文章转载自:

http://SwrEBNlF.nbhft.cn
http://Gc2bKJ1l.nbhft.cn
http://89BqpG8l.nbhft.cn
http://W5VhuEbJ.nbhft.cn
http://mkohqVn9.nbhft.cn
http://kxGJcLQ3.nbhft.cn
http://fhwtfVcA.nbhft.cn
http://xD8eB1ja.nbhft.cn
http://6WICqiZO.nbhft.cn
http://TVvEbzco.nbhft.cn
http://d7h2nguP.nbhft.cn
http://GNfOSynH.nbhft.cn
http://ponLPwHw.nbhft.cn
http://E0oIIM5o.nbhft.cn
http://2cQVzGTT.nbhft.cn
http://0kQSAsic.nbhft.cn
http://bczMQSo7.nbhft.cn
http://8lS0Iw7J.nbhft.cn
http://WaU4EOGh.nbhft.cn
http://ra0MqfDo.nbhft.cn
http://z5DJzWUt.nbhft.cn
http://5CJzmTb0.nbhft.cn
http://kr0uFsuV.nbhft.cn
http://Nihnn1bg.nbhft.cn
http://3vOUbspM.nbhft.cn
http://DMLXFOft.nbhft.cn
http://TzC08Sue.nbhft.cn
http://6oFuvawo.nbhft.cn
http://alMvdZJv.nbhft.cn
http://ZR6RgnX2.nbhft.cn
http://www.dtcms.com/a/379385.html

相关文章:

  • 怎么降低 AIGC 生成率?
  • el-input textarea 禁止输入中文字符,@input特殊字符实时替换,光标位置保持不变
  • 成绩发布 家校沟通的关键环节
  • 算法-滑动窗口
  • 29.线程的互斥与同步(三)
  • 第3节-使用表格数据-DEFAULT约束
  • linux系统安装wps
  • 26. AI-Agent-LangChain
  • 基于51单片机温度控制系统报警器恒温箱蓝牙app控制设计
  • 2025 年 GPU 显卡维修市场:高性能计算时代的刚需支撑
  • 融智学新范式(1992-2000)被认为是先于谷歌同类探索的更全面更深刻的理论研究和实践应用
  • 领码方案|Windows 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
  • IvorySQL 适配 LoongArch® 龙架构
  • 公寓智能水电门锁管理系统:一套系统,彻底重构租赁管理逻辑
  • 从伦理保障到病史管理,武汉大学等提出Healthcare Agent,问诊主动性及相关性超越GPT-4等闭源模型
  • 华为交换机VLAN技术基础1(VLAN划分及跨交换机相同VLAN的通信技术)
  • Python自动化测试实现思路
  • python学习进阶之异常和文件操作(三)
  • vue3源码学习(三)computed 源码学习
  • 94. 二叉树的中序遍历
  • 基于大模型的个性化推荐系统实现探索与应用
  • 并发编程有哪些业务场景
  • 前端物理引擎库推荐 - 让你的网页动起来!
  • 考华为认证可从事哪些工作?
  • 【Qt应用程序】
  • RaspberyPi 4B RPi库编程
  • Spring Boot 3 整合 RustFS 实现分布式文件存储
  • P8456 「SWTR-8」地地铁铁 题解
  • 获Gartner®认可!锐捷入选2025年Gartner园区网络基础设施管理与运营软件市场指南
  • 告别环境地狱!Java生态“AI原生”解决方案入驻 GitCode​