关于无感刷新Token,我是这样子做的

简介: JWT是全称是JSON WEB TOKEN,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可选的数字加密,可使用RSA或ECDSA进行公钥/私钥签名。

什么是JWT
JWT是全称是JSON WEB TOKEN,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可选的数字加密,可使用RSA或ECDSA进行公钥/私钥签名。
使用场景
JWT最常见的使用场景就是缓存当前用户登录信息,当用户登录成功之后,拿到JWT,之后用户的每一个请求在请求头携带上Authorization字段来辨别区分请求的用户信息。且不需要额外的资源开销。
相比传统session的区别
比起传统的session认证方案,为了让服务器能识别是哪一个用户发过来的请求,都需要在服务器上保存一份用户的登录信息(通常保存在内存中),再与浏览器的cookie打交道。

安全方面 由于是使用cookie来识别用户信息的,如果cookie被拦截,用户会很容易受到跨站请求伪造的攻击。
负载均衡 当服务器A保存了用户A的数据之后,在下一次用户A服务器A时由于服务器A访问量较大,被转发到服务器B,此时服务器B没有用户A的数据,会导致session失效。
内存开销 随着时间推移,用户的增长,服务器需要保存的用户登录信息也就越来越多的,会导致服务器开销越来越大。

为什么说JWT不需要额外的开销
JWT为三个部分组成,分别是Header,Payload,Signature,使用.符号分隔。
// 像这样子
xxxxx.yyyyy.zzzzz
复制代码
标头 header
标头是一个JSON对象,由两个部分组成,分别是令牌是类型(JWT)和签名算法(SHA256,RSA)
{
"alg": "HS256",
"typ": "JWT"
}
复制代码
负荷 payload
负荷部分也是一个JSON对象,用于存放需要传递的数据,例如用户的信息

{
"username": "_island",
"age": 18
}

复制代码
此外,JWT规定了7个可选官方字段(建议)

属性说明issJWT签发人expJWT过期时间subJWT面向用户audJWT接收方nbfJWT生效时间iatJWT签发时间jtiJWT编号
签章 signature
这一部分,是由前面两个部分的签名,防止数据被篡改。
在服务器中指定一个密钥,使用标头中指定的签名算法,按照下面的公式生成这签名数据
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
复制代码
在拿到签名数据之后,把这三个部分的数据拼接起来,每个部分中间使用.来分隔。这样子我们就生成出一个了JWT数据了,接下来返回给客户端储存起来。而且客户端在发起请求时,携带这个JWT在请求头中的Authorization字段,服务器通过解密的方式即可识别出对应的用户信息。
JWT优势和弊端
优势

数据体积小,传输速度快
无需额外资源开销来存放数据
支持跨域验证使用

弊端

生成出来的Token无法撤销,即使重置账号密码之前的Token也是可以使用的(需等待JWT过期)
无法确认用户已经签发了多少个JWT
不支持refreshToken

关于refreshToken
refreshToken是Oauth2认证中的一个概念,和accessToken一起生成出来的。
当用户携带的这个accessToken过期时,用户就需要在重新获取新的accessToken,而refreshToken就用来重新获取新的accessToken的凭证。

相关文章
请问一下每次登录或者短时间内需要查看云效消息,都需要刷新一下才可以看到最新的,是可以如何设置一下然后能够及时看到吗
请问一下每次登录或者短时间内需要查看云效消息,都需要刷新一下才可以看到最新的,是可以如何设置一下然后能够及时看到吗
86 1
|
缓存 小程序 前端开发
【Uniapp】小程序携带Token请求接口+无感知登录方案2.0
【Uniapp】小程序携带Token请求接口+无感知登录方案2.0
361 0
|
JSON 安全 数据安全/隐私保护
Refresh Token的使用场景以及如何与JWT交互
在这篇文章中,我们将探索由OAuth2定义的Refresh Token的概念。我们将会明白为什么他们会这样做,以及他们如何与其他类型的Token进行比较。我们也将通过一个简单的例子来学习如何使用它们。
18124 0
|
5月前
|
存储 JSON 前端开发
SpringBoot 如何实现无感刷新Token
【8月更文挑战第30天】在Web开发中,Token(尤其是JWT)作为一种常见的认证方式,被广泛应用于身份验证和信息加密。然而,Token的有效期问题常常导致用户需要重新登录,从而影响用户体验。为了实现更好的用户体验,SpringBoot可以通过无感刷新Token的机制来解决这一问题。以下将详细介绍SpringBoot如何做到无感刷新Token。
213 2
|
6月前
|
前端开发
token 无感刷新
token 无感刷新
72 0
|
8月前
|
存储 UED
如何在项目中无感地刷新用户的令牌?
【2月更文挑战第16天】
109 1
|
前端开发 数据库 UED
无感token实现方案
无感token实现方案
|
缓存 小程序 NoSQL
【Uniapp】小程序携带Token请求接口+无感知登录方案
【Uniapp】小程序携带Token请求接口+无感知登录方案
309 0
|
存储 消息中间件 NoSQL
如何设置token有效期【5个应用场景分析+双token实现解析】
如何设置token有效期【5个应用场景分析+双token实现解析】
|
存储 缓存 前端开发
关于JWT Token 自动续期的解决方案
关于JWT Token 自动续期的解决方案
1556 1