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

007 JSON Web Token

文章目录


https://doc.hutool.cn/pages/jwt/#jwt%E4%BB%8B%E7%BB%8D
JWT是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。这个标准由互联网工程任务组(IETF)发表,定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。

JWT 通常用于在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以用于验证信息的完整性。

JWT由头部(Header)、载荷(Payload)和签名(Signature)三个部分组成,这些信息都被编码在JWT中,形成一个紧凑的字符串。
头部:描述了JWT的签名算法和其它元数据,如使用的哈希算法等。
载荷:包含了发行方信息、用户信息、过期时间等声明。这些声明可以是标准的,也可以是自定义的。
签名:是对头部和载荷进行数字签名的结果,用于验证JWT的完整性和真实性。签名通常使用头部中指定的签名算法和服务器端的密钥生成。

JWT(JSON Web Token)的自包含性指的是,JWT本身包含了所有验证和识别用户身份所需的信息,而不需要额外查询数据库或调用其他服务。

JWT通常存储在客户端,而服务端不直接存储JWT本身。

  1. JWT的生成与发送:

    • 当用户成功登录后,服务端会验证用户的身份信息。

    • 如果验证通过,服务端会生成一个JWT,这个JWT包含了用户的身份信息、过期时间等信息,并且经过数字签名以确保其完整性。

    • 然后,服务端将这个JWT发送给客户端,通常是通过HTTP响应头中的Authorization字段,格式为Bearer 。

  2. 客户端存储JWT:

    • 客户端收到JWT后,通常会将其存储在本地,以便在后续的请求中使用。

    • 存储方式可以是浏览器的localStorage、sessionStorage,或者是在移动应用中存储在设备的存储系统中。

    • 客户端在发送请求时,会从存储中取出JWT,并将其包含在请求头中发送给服务端。

  3. 服务端验证JWT:

    • 服务端在收到请求后,会从请求头中提取出JWT。

    • 然后,服务端会使用自己的私钥(如果是用RSA算法)或者相同的密钥(如果是用HMAC算法)来验证JWT的数字签名。

    • 如果签名验证通过,并且JWT没有过期,服务端就会认为这个请求是合法的,并根据JWT中的声明来执行相应的操作。

  4. 服务端不存储JWT:

    • 与传统的Session认证方式不同,服务端在JWT认证中不需要存储用户的会话信息。

    • 因为JWT本身已经包含了足够的用户信息和验证信息,服务端只需要验证JWT的有效性即可。

    • 这使得服务端可以更加轻量级和可扩展,因为不需要维护大量的会话状态信息。

需要注意的是,虽然服务端不直接存储JWT,但服务端可能需要存储一些与JWT相关的其他信息,比如用于签发和验证JWT的密钥、JWT的过期策略等。此外,为了安全性考虑,服务端还应该采取适当的措施来保护这些敏感信息不被泄露。

在Java中,存在多种JWT的实现库,如jjwt(Java JWT)、nimbusds-jwt等。
这些不同的JWT实现库在功能上可能相似,但在内部实现、性能、安全性等方面可能存在差异。例如,一些库可能提供了更强大的加密算法、更灵活的签名和验证机制,或者更好的异常处理和错误报告等。因此,在选择JWT实现库时,需要根据具体的应用场景和安全需求进行评估和选择。
同时,即使使用了相同的JWT实现库,不同的开发者在实现JWT的生成、解析和验证过程中也可能采用不同的方法和参数,从而影响JWT的安全性。例如,选择较弱的加密算法、不严格的签名验证规则、不安全的密钥管理等都可能导致JWT的安全性降低。

http://www.lryc.cn/news/530619.html

相关文章:

  • Windsurf cursor vscode+cline 与Python快速开发指南
  • 将markdown文件和LaTex公式转为word
  • grpc 和 http 的区别---二进制vsJSON编码
  • C#面向对象(封装)
  • kamailio-kamctl monitor解释
  • 39. I2C实验
  • GPIO配置通用输出,推挽输出,开漏输出的作用,以及输出上下拉起到的作用
  • Spring AOP 入门教程:基础概念与实现
  • DeepSeek 核心技术全景解析
  • 90,【6】攻防世界 WEB Web_php_unserialize
  • 实现网站内容快速被搜索引擎收录的方法
  • WSL2中安装的ubuntu搭建tftp服务器uboot通过tftp下载
  • 机器学习优化算法:从梯度下降到Adam及其变种
  • [SAP ABAP] 静态断点的使用
  • 129.求根节点到叶节点数字之和(遍历思想)
  • NCCL、HCCL、通信、优化
  • unity学习21:Application类与文件存储的位置
  • 17 一个高并发的系统架构如何设计
  • Spring Boot 实例解析:配置文件
  • pytorch图神经网络处理图结构数据
  • 计算机网络一点事(23)
  • (9)下:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同。小例子的实验
  • DeepSeek-R1模型1.5b、7b、8b、14b、32b、70b和671b有啥区别?
  • 一、html笔记
  • AI大模型开发原理篇-2:语言模型雏形之词袋模型
  • 基于微信小程序的实习记录系统设计与实现(LW+源码+讲解)
  • 【LLM】DeepSeek-R1-Distill-Qwen-7B部署和open webui
  • 【Elasticsearch】 Intervals Query
  • DeepSeek技术深度解析:从不同技术角度的全面探讨
  • Docker 部署 Starrocks 教程