JWT(JSON WEB TOKEN)

JWT认证机制详解

JWT出现的背景

http是无状态协议

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

Cookie-Session 认证模式

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

  • 客户端使用用户名、密码进行认证
  • 通过Cookie返回给客户端服务端验证用户名、密码正确后生成并存储Session,将Sessionl
  • 客户端访问需要认证的接口时在Cookie 中携带SessionlD的数据服务端通过SessionlD查找Session并进行鉴权,返回给客户端需要的数据

在这里插入图片描述

基于Session的方式存在多种问题,

  • 服务端需要存储Session,并且由于Session需要经常快速查找,通常存储在内存或内存数据库中,同时在线用户较多时需要占用大量的服务器资源。
  • 当需要扩展时,创建Session的服务器可能不是验证Session的服务器,所以还需要将所有Session单独存储并共享由于客户端使用Cookie存储SessionlD
  • 在跨域场景下需要进行兼容性处理,同时这种方式也难以防范CSRF攻击。

这种模式最大的问题是,没有分布式架构,无法支持横向扩展。如果使用一个服务器,该模式完全没有问题。但是,如果它是服务器群集或面向服务的跨域体系结构的话,则需要一个统一的session数据库库来保存会话数据实现共享,这样负载均衡下的每个服务器才可以正确的验证用户身份。

例如,举一个实际中常见的单点登陆的需求:站点A和站点B提供同一公司的相关服务。现在要求用户只需要登录其中一个网站,然后它就会自动登录到另一个网站。怎么做?

一种解决方案是听过持久化session数据,写入数据库或文件持久层等。收到请求后,验证服务从持久层请求数据。该解决方案的优点在于架构清晰,而缺点是架构修改比较费劲,整个服务的验证逻辑层都需要重写,工作量相对较大。而且由于依赖于持久层的数据库或者问题系统,会有单点风险,如果持久层失败,整个认证体系都会挂掉。

另一种方案是服务器索性不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器。JWT 就是这种方案的一个代表。
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。

JWT

介绍

JWT是JSON Web Token 的缩写,是为了在网络应用环境间传递专明而执行的一种基于JSON的开放标准(RFC7519)。JWT本身没有定义何技术实现,它只是定义了一种基于作Token的会话管理的规则,涵盖Token需要包含的标准内容和Toke的生成过程,特别适用于分布式站点的单点登录(SSO)场景。

JWT 的原理是,服务器认证以后,生成一个 JSON 对象,发回给用户,就像下面这样。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值