jwt需要存redis吗_Java基于JWT的token认证

一、背景引入

由于Http协议本身是无状态的,那么服务器是怎么识别两次请求是不是来自同一个客户端呢,传统用户识别是基于seeion和cookie实现的。大致流程如下:

ff5c59561728392427f6ea7b5ac3e932.png
  1. 用户向服务器发送用户名和密码请求用户进行校验,校验通过后创建session绘画,并将用户相关信息保存到session中服务器将sessionId回写到用户浏览器cookie中用户以后的请求,都会鞋带cookie发送到服务器服务器得到cookie中的sessionId,从session集合中找到该用户的session回话,识别用户

这种模式有很多缺点,对于分布式架构的支持以及扩展性不是很好。而且session是保存在内存中,单台服务器部署如果登陆用户过多占用服务器资源也多,做集群必须得实现session共享的话,集群数量又不易太多,否则服务器之间频繁同步session也会非常耗性能。当然也可以引入持久层,将session保存在数据库或者redis中,保存数据库的话效率不高,存redis效率高,但是对redis依赖太重,如果redis挂了,影响整个应用。还有一种办法就是不存服务器,而是把用户标识数据存在浏览器,浏览器每次请求都携带该数据,服务器做校验,这也是JWT的思想。

二、JWT介绍

2.1 概念介绍

Json Web Token(JWT)是目前比较流行的跨域认证解决方案,是一种基于JSON的开发标准,由于数据是可以经过签名加密的,比较安全可靠,一般用于前端和服务器之间传递信息,也可以用在移动端和后台传递认证信息。

2.2 组成结构

JWT就是一段字符串,格式如下:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxIn0.qfd0GelhE1aGr15LrnYlIZ_3UToaOM5HeMcXrmDG

由于三部分组成,之间用"."接。第一部分是头信息Header,中间部分是载荷Payload,最后部分是签名信息Signature。

头信息Header:描述JWT基本信息,typ表示采用JWT令牌,alg(algorithm)表示采用什么算法进行签名,常见算法有HmacSHA256(HS256)、HmacSHA384(HS384)、HmacSHA512(HS512)、SHA256withECDSA(ES256)、SHA256withRSA(RS256)、SHA512withRSA(RS512)等。如果采用HS256则头信息结构为:

{ "typ": "JWT
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值