JWT单点登录

目录

一:什么是JWT

 二:JWT实现用户认证流程图

三:为什么要使用JWT

四:Java过程中的实际开发应用

五:jwt延时失效怎么解决的

一:什么是JWT

通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输

当然使用Session可以实现这个功能,但是使用Session的同时也会增加服务器的存储压力,而JWT是将存储的压力分布到各个客户端机器上,从而减轻服务器的压力。

JWT由3个子字符串组成,分别为Header,Payload以及Signature,结合JWT的格式即:Header.Payload.Signature

(Claim是描述Json的信息的一个Json,将Claim转码之后生成Payload)。

JWT单点登录_第1张图片

JWT单点登录_第2张图片 

JWT单点登录_第3张图片 

 二:JWT实现用户认证流程图

这里写图片描述 

 

三:为什么要使用JWT

我们知道HTTP协议本身是无状态的,如果用户向我们的应用提供了用户名和密码来进行用户认证,认证通过后的http协议不会记录下认证后的状态,那么下一次请求时,还需要重新进行用户认证,因为根据HTTP协议,我们并不知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在用户首次登录成功后,在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这是传统的基于session认证的过程

然而,传统的session认证有如下的问题:

  • 每个用户的登录信息都会保存到服务器的session中,随着用户的增多,服务器开销会明显增大
  • 对于非游览器的客户端,手机移动端等不适用,因为session依赖cookie,而移动端没有cookie
  • 因为session认证本质基于cookie,所以如果cookie被截获,用户很容易收到跨站请求伪造攻击。并且如果浏览器禁用了cookie,这种方式也会失效
  • 由于基于Cookie,而cookie无法跨域,所以session的认证也无法跨域,对单点登录不适用

四:Java过程中的实际开发应用

1.在登录验证通过后,给用户生成一个随机的token(这个不是jwt,可以用uuid等算法生成),然后将这个token作为key的一部分,用户信息作为value 存入redis中,并设置过期时间,这个过期时间就是jwt失效时间

2.将第一步中随机生成的token作为JWT的payLoad生成JWT字符串返回给前端

3.前端之后每次请求都在请求头中的Authorization字段中携带JWT字符串

4.后端定义一个拦截器,每次收到前端请求时,都先从请求头中的Authorization字段中取出JWT字符串并进行验证,验证通过后解析出payload中的随机token,然后再用这个随机token得到key,从Redis中获取用户信息,如果能获取到就说明用户已经登录

五:jwt延时失效怎么解决的

你可能感兴趣的:(框架,json)