首页 > 其他分享 >JWT Token 刷新方案

JWT Token 刷新方案

时间:2024-02-02 15:11:26浏览次数:21  
标签:RefreshToken 过期 JWT token base64UrlEncode Token 刷新

一:什么是JWT

JWT(JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于Token的认证授权机制。从JWT的全称可以看出,JWT本身也是Token,JWT自身包含了身份验证所需要的所有信息。因此,服务端不需要存储session信息,大大减轻了服务端的压力。

JWT本质上就是一组字符串,通过"."切割成三个为Base64编码的部分:

• Header:是一个JSON对象,描述JWT的元数据,定义了生成签名的算法以及Token的类型

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

alg(algorithm):是签名算法,一般是HS256

typ(type):固定值为JWT

• Payload: 也是一个JSON对象,用来存放实际需要传递的数据。JWT规定了7个官方字段,供选用:

{
"iss": "d8b832c0c8caf0d99e9406ed",
"sub": "1",
"aud": "baijunyao",
"iat": "1557066830",
"nbf": "1557066840",
"exp": "1557066850",
"jti": "9e9668d8b8306ed8caf0d94"
}

iss(issuer):发布者

sub(subject):面向的用户

aud(audience):受众

iat(issue at):签发时间的时间戳

nbf(not before):生效时间的时间戳

exp(expiration time):过期时间的时间戳

jti(jwt id):每个JWT自己的唯一id

除了官方定义的这些字段,也可以自己定义一些自己需要的字段

• Signature(签名):

该部分是对前两部分的签名,防止数据篡改,默认使用HS256算法进行签名。签名的方式是把头部和负载分别base64UrlEncode后用"."拼接起来使用Secret进行HS256

Signature = HS256(base64UrlEncode(Header) . base64UrlEncode(Payload), Secret)

 

JWT一共由Header(头部).Payload(负载).Signature(签名)组成,如下:

JWT = base64UrlEncode(Header) . base64UrlEncode(Payload) . HS256(base64UrlEncode(Header) . base64UrlEncode(Payload), Secret)

二:JWT刷新策略

• 利用redis存储jwt(这个可以实现,但是有违jwt的初衷)

ruoyi框架就是用了该种方案,服务端收到请求后,解析token,查看过期时间,当token还有20分钟就要过期时,就刷新token,实际上就是延长token在redis的保存时长。

检查token失效时长:

 刷新token在redis的保存时长:

 

•  前端控制检测token,无感知刷新

用户登录成功的时候,一次性给两个Token,分别是AcessToken和RefreshToken,AcessToken有效期较短,用于正常请求;RefreshToken有效期可以设置长一些,例如10天、20天,作为刷新AcessToken的凭证。

刷新方案:当AccessToken即将过期的时候,例如提前30分钟,客户端利用RefreshToken请求制定的API获取新的AccessToken并更新本地存储的AccessToken

核心逻辑:

1:登录成功后,jwt生成AcessToken;UUID生成RefreshToken并存储在服务端redis中,设置过期时间;

2:接口返回3个字段AccessToken/RefreshToken/访问令牌过期时间戳;

3:由于RefreshToken存储在服务端redis中,假如这个RefreshToken也过期,则提示重新登录;

疑问:RefreshToken有效期那么长,和直接将AccessToken的有效期延长有什么区别?

答:RefreshToken不像AccessToken那样在大多数请求中被使用,主要是本地检测accessToken快过期的时候才使用,一般本地存储的时候也不叫RefreshToken,前端可以取个别名,混淆代码让攻击者不能直接识别这个就是刷新令牌。

缺点:前端每次请求需要判断token距离过期时间。

优点:后端压力小,代码逻辑改动不大。

该种方案需要将AccessToken和RefreshToken都在前端localStorage保存一份,另外RefreshToken需要在后端redis中也保存一份用于校验RefreshToken的有效性。

 

标签:RefreshToken,过期,JWT,token,base64UrlEncode,Token,刷新
From: https://www.cnblogs.com/andy1234/p/18003206

相关文章

  • JWT的生成和校验
    JWT(JSONWebToken)是一种开放标准(RFC7519),用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。1、头部(Header):包含了关于生成该JWT的信息以及所使用的算法类型。2、载荷(payload): ......
  • https请求获取token和cookie,并用于未来其他请求
    主要参考百度AI生成的程序。上次的例子用token带入了新的请求,请求成功,正确获取response.我这里的例子是:当请求不含token时,请求失败;当请求只含有token时,监控软件没有获取请求的用户名;当请求含有token和cookie时,监控软件能获取请求的用户名。我这里需要获取用户名,因此必须请求必须加......
  • JWT认证步骤
    JWT(JSONWebToken)是一种用于身份验证和信息交换的开放标准(RFC7519),它通过在用户和服务器之间传递经过签名的令牌来实现安全登录和认证。以下是使用JWT实现用户安全登录和认证的一般步骤:步骤1:用户登录用户提供凭据:用户向服务器提供用户名和密码。验证凭据:服务器验证用户提供......
  • Java21 + SpringBoot3整合springdoc-openapi,自动生成在线接口文档,支持SpringSecurity
    目录前言相关技术简介OpenAPISwaggerSpringfoxspringdocswagger2与swagger3常用注解对比实现步骤引入maven依赖修改配置文件设置api-docs和swagger-ui访问权限定义springdoc配置类修改Controller类和实体类查看效果总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多......
  • 如何在vue3项目app.ts中获取第三方跳转过来的token 提前处理携带token情况的初始化 两
    如何在vue3项目app.ts中获取第三方跳转过来的token提前处理携带token情况的初始化两种方式路由守卫和window.location在Vue3项目的app.ts文件中获取第三方跳转过来的token,你可以使用VueRouter的route对象来获取URL参数。假设你的token参数位于URL的查询字......
  • 删除表格某一行数据后,刷新列表,当前页码需要重置为1吗?给出最佳实践
    删除表格某一行数据后,刷新列表,当前页码需要重置为1吗?给出最佳实践在删除表格中某一行数据后,是否需要将当前页码重置为1,取决于具体的应用场景和用户体验需求。以下是一些考量因素以及最佳实践:考量因素:数据总量与分页逻辑:如果删除操作导致当前页面的数据不足以填充整个页面(例如,......
  • 如果是左树右表,修改成功后,是只刷新当前列表,还是需要刷新右侧的树?
    在左树右表的场景中,用户修改成功后,数据刷新策略取决于以下几个因素:数据关联性:如果右侧列表中的数据与左侧树形结构紧密相关,即修改了列表项可能影响到左侧树形结构(例如部门或组织架构中,修改一个用户的属性可能导致其所在部门信息变化),则应同步更新左侧的树。实时性需求:如果系......
  • arcgis server地图服务访问权限设置及arcgis server token获取
    一、地图服务访问权限设置。当我们发布arcgis地图服务后,由于涉密或者其他原因,不想让所有人看到地图服务。这时候我们可以对地图设置权限。怎末设置那?进入你们arcgis管理。地址:http://localhost:6080/arcgis/manager/index.html#新建角色。  新建用户。 新建成功。 ......
  • session和token以及cookie作用及区别
    Session、Token和Cookie都是在网络应用中用于身份验证和会话管理的技术。其作用和区别如下:Session:作用:Session是一种在Web服务器和浏览器之间维护状态的机制。当用户在Web应用程序中进行操作时,服务器会为该用户创建一个唯一的SessionID,并通过Cookie或URL将其传递给浏览器。......
  • Gin 应用多实例部署session问题、session参数与刷新
    目录一、GinSession存储的实现方案二、memstore:基于内存的实现2.1基本使用2.2关键参数三、使用redis:多实例部署3.1使用redis优势3.2基本使用四、信息安全的三个核心概念五、GinSession参数5.1参数介绍六、Session自动刷新一、GinSession存储的实现方案cookie:基于co......