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

JSON Web Token (JWT) 详解:由来、原理与应用实践

1. JWT的由来与发展背景

 1.1 HTTP无状态性带来的挑战

        HTTP协议本质上是无状态的,这意味着服务器不会记住之前的请求信息。在早期的Web应用中,用户每次访问受保护资源都需要重新登录,这显然不是良好的用户体验。为解决这一问题,开发者引入了Cookie技术,通过在请求和响应报文中写入Cookie信息来控制客户端状态。

 1.2 Session认证机制的局限性

        传统的基于Session的身份认证机制虽然解决了HTTP无状态的问题,但随着互联网应用的发展,逐渐暴露出几个关键问题:

1.服务器压力增大:每个认证用户都需要在服务端保存Session数据,随着用户量增长,服务器内存消耗显著增加。

2.扩展性问题:在分布式系统或集群环境下,Session数据通常存储在单台服务器内存中,当用户请求被负载均衡到不同服务器时,会出现Session不一致的问题。

3.CSRF攻击风险:Session机制依赖Cookie,容易受到跨站请求伪造(CSRF)攻击。

4.移动端适配困难:移动应用对Cookie的支持不如浏览器完善,使得基于Session的认证在移动端表现不佳。

1.3 JWT的诞生

        为解决上述问题,JSON Web Token(JWT)应运而生。JWT是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于在各方之间安全地传输JSON格式的信息。JWT的设计理念是将用户认证信息直接包含在Token中,而不是存储在服务器端,从而实现了无状态认证

2. JWT的核心结构与工作原理

2.1 JWT的组成结构

JWT由三部分组成,使用点号(.)连接:`Header.Payload.Signature`

2.1.1 Header(头部)

头部通常包含两部分信息:
typ:令牌类型,固定为"JWT"
alg:签名算法,如HS256(HMAC SHA-256)或RS256(RSA SHA-256)

示例:

json
{
  "alg": "HS256",
  "typ": "JWT"
}

头部经过Base64Url编码后形成JWT的第一部分。

2.1.2 Payload(负载)

负载包含声明(claims),即关于实体(通常是用户)和其他元数据的声明。声明分为三种类型:

1. 注册声明(Registered claims):预定义的声明,建议但不强制使用:
   - iss (issuer):签发者
   - exp (expiration time):过期时间
   - sub (subject):主题(用户ID)
   - aud (audience):接收方
   - iat (issued at):签发时间
   - nbf (not before):生效时间
   - jti (JWT ID):唯一标识

2. 公共声明(Public claims):可以自定义的公开字段,应避免冲突

3. 私有声明(Private claims):提供者和消费者共同定义的声明

示例:

相关文章:

  • CloudCompare——计算点云表面曲率
  • 基于Docker Compose部署Java微服务项目
  • day47 TensorBoard学习
  • Java 异步编程难题及拆解技术
  • 在嵌入式中C语言中static修饰的变量常量和字符串常量存储位置
  • Flink 高可用集群部署指南
  • 【Algorithm】Union-Find简单介绍
  • Filebeat收集nginx日志到elasticsearch,最终在kibana做展示(二)
  • JAVA之 Lambda
  • 算法训练第九天
  • docker快速部署OS web中间件 数据库 编程应用
  • 第14节 Node.js 全局对象
  • 【推荐算法】WideDeep推荐模型:融合记忆与泛化的智能推荐引擎
  • 37.第二阶段x64游戏实战-封包-寻找Socket套接字
  • Oracle杀进程注意事项
  • oracle数据恢复—oracle数据库执行truncate命令后的怎么恢复数据?
  • Java并发编程实战 Day 9:锁优化技术
  • C语言 — 编译和链接
  • 【杂谈】-吉卜力化(Ghiblified ) AI 图像:艺术与隐私的交织
  • PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第二部分)
  • 做网站分辨率设置多少/网站域名购买
  • 用html5做京东网站代码/微信朋友圈推广文案
  • 哪个网站做logo/推广图片大全
  • 扁平式网站seo 内链/seo成创网络
  • 邢台地区网站建设/西安seo经理
  • 怎么选择做网站的公司/社群推广平台