JWT浅析

本文介绍了JWT(Json Web Token)的概念,它是基于Token的会话管理规则,常用于单点登录(SSO)场景。文章对比了JWT与基于Session的传统认证方式,指出JWT的无状态特性使其在扩展性和安全性上有优势,但也存在如无法撤销、过期控制等问题。JWT由头部、负载和签名三部分构成,其中负载可以存放用户信息和过期时间。文章还讨论了JWT的使用、优缺点及其引申的Token续签模式,并提出了关于多有效Token处理和黑名单维护的思考问题。
摘要由CSDN通过智能技术生成

一、概念

Json web token (JWT)是啥?

JWT 是 JSON Web Token 的缩写,JWT 本身没有定义任何技术实现,它只是定义了一种基于 Token 的会话管理的规则,涵盖 Token 需要包含的标准内容和 Token 的生成过程。

是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

二、背景分析

HTTP 是一个无状态的协议,一次请求结束后,下次在发送服务器就不知道这个请求是谁发来的了(同一个 IP 不代表同一个用户),在 Web 应用中,用户的认证和鉴权是非常重要的一环,实践中有多种可用方案,并且各有千秋。

1.传统基于session的会话管理/认证

a. session基本认知

在 Web 应用发展的初期,大部分采用基于 Session 的会话管理方式,逻辑如下:

  • 客户端使用用户名密码进行认证

  • 服务端认证成功后,生成并存储 Session,将 SessionID 通过 Cookie 返回给客户端

  • 客户端访问需要认证的接口时在 Cookie 中携带 SessionID,服务端通过 SessionID 查找 Session 并进行鉴权,返回给客户端需要的数据在这里插入图片描述

b. session的认证方式暴露的问题

  • 服务端开销大:为便用户下次请求的鉴别,服务端会存储session,为了快速认证,通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大。

  • 扩展差:session存储在客户当时请求的服务器的内存中,当需要做分布式等扩展性服务时,数据同步的问题,会变得很麻烦,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。

  • 易被CSRF攻击:由于客户端使用 Cookie 存储 SessionID,在跨域场景下需要进行兼容性处理,同时这种方式也难以防范 CSRF 攻击。

2. 基于token的会话管理/认证

鉴于基于 Session 的会话管理方式存在上述多个缺点,无状态的基于 Token 的会话管理方式诞生了,所谓无状态,就是服务端不再存储信息,甚至是不再存储 Session,意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,逻辑如下:

  • 客户端使用用户名密码进行认证
  • 服务端认证成功后,利用特定算法,生成token,将token返回给客户端
  • 客户端访问需要认证的接口时在 URL 参数或 HTTP Header (推荐)中加入 Token,服务端通过解码 Token 进行鉴权,返回给客户端需要的数据
    在这里插入图片描述

基于 Token 的会话管理方式有效解决了基于 Session 的会话管理方式带来的问题。

  • 服务端不需要存储和用户鉴权有关的信息,鉴权信息会被加密到 Token 中
  • 服务端只需要读取 Token 中包含的鉴权信息即可
  • 避免了共享 Session 导致的不易扩展问题不需要依赖 Cookie,有效避免 Cookie 带来的 CSRF 攻击问题
  • 服务器使用 CORS(跨域资源共享) 可以快速解决跨域问题Access-Control-Allow-Origin: *

三、主角JWT

1. jwt基本结构

Jwt是由三段信息构成的,将这三段信息文本用.链接一起就构成了Jwt字符串。就像这样

jwt 结构生成下

  • 其构成由三部分构成,分别为:头部(
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值