tokenpocket最新钱包5.0024版本|token过期了怎么处理

作者: tokenpocket最新钱包5.0024版本
2024-03-09 23:45:53

vue实际运用六:处理token过期_vue 拦截器对token过期处理方法-CSDN博客

>

vue实际运用六:处理token过期_vue 拦截器对token过期处理方法-CSDN博客

vue实际运用六:处理token过期

GG·bond

已于 2022-01-21 14:49:01 修改

阅读量1.3w

收藏

158

点赞数

20

分类专栏:

vue实际运用

文章标签:

vue处理过期token

于 2021-12-24 14:37:35 首次发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/GTbond/article/details/122124609

版权

vue实际运用

专栏收录该内容

14 篇文章

7 订阅

订阅专栏

vue实际运用六:处理token过期

1. 后端为了安全,token一般存在有效时间,当token过期,所有请求失效

解决方案:

1)在请求发起前拦截每个请求,判断token的有效时间是否已经过期,若已过期,则将请求挂起,先刷新token后再继续请求。

优点: 在请求前拦截,能节省请求,省流量缺点: 需要后端额外提供一个token过期时间的字段;使用了本地时间判断,若本地时间被篡改,特别是本地时间比服务器时间慢时,拦截会失败使用方法:axios.interceptors.request.use() 这个请求前拦截方法

2)根据拦截返回后的数据判断,若token过期,先刷新token,再进行一次请求。

优点:不需额外的token过期字段,不需判断时间缺点: 会消耗多一次请求,耗流量使用方法:axios.interceptors.response.use() 这个响应拦截方法

最简单方法:获取到过期code,直接跳到登录页

2. 实现方法二

1)封装axios基本结构

token是存在localStorage中

//在request.js

import axios from 'axios'

// 创建一个实例

const service = axios.create({

baseURL: process.env.VUE_APP_BASE_API,

timeout: 5000 // request timeout

})

// 从localStorage中获取token

function getLocalToken () {

const token = window.localStorage.getItem('token')

return token

}

// 给实例添加一个setToken方法,用于登录后将最新token动态添加到header,同时将token保存在localStorage中

service.setToken = (token) => {

instance.defaults.headers['X-Token'] = token

window.localStorage.setItem('token', token)

}

// 拦截返回的数据

service.interceptors.response.use(response => {

// 接下来会在这里进行token过期的逻辑处理

return response

}, error => {

return Promise.reject(error)

})

//暴露

export default service

假如后端接口token过期返回的code是401

//获取新的token请求

function refreshToken () {

return service.post('/refreshtoken').then(res => res.data)

}

// 拦截返回的数据

service.interceptors.response.use(response => {

// 接下来会在这里进行token过期的逻辑处理

const { code } = response.data

-----------------------------------------------------------

// 说明token过期了,获取新的token

if (code === 401) {

return refreshToken().then(res => {

// 刷新token成功,将最新的token更新到header中,同时保存在localStorage中

const { token } = res.data

service.setToken(token)

// 获取当前失败的请求

const config = response.config

//重置失败请求的配置

config.headers['X-Token'] = token

config.baseURL = '' "

//重试当前请求并返回promise

return service(config)

}).catch( res=>{

//重新请求token失败,跳转到登录页

window.location.href = '/login '

} )

}

--------------------------------------------------------------

return response

}, error => {

return Promise.reject(error)

})

2)问题和优化

如果token失效时,存在多个请求,这就会导致多次执行刷新token的接口

在request.js中用一个变量来标记当前是否正在刷新token的状态,如果正在刷新则不再调用刷新token的接口

在request.js

// 是否正在刷新的标记

let isRefreshing = false

-----------------------------------------------------------

// 说明token过期了,获取新的token

if (code === 401) {

//判断一下状态

if( !isRefreshing ){

//修改状态,进入更新token阶段

isRefreshing = true

return refreshToken().then(res => {

// 刷新token成功,将最新的token更新到header中,同时保存在localStorage中

const { token } = res.data

service.setToken(token)

// 获取当前失败的请求

const config = response.config

//重置失败请求的配置

config.headers['X-Token'] = token

config.baseURL = '' "

//重试当前请求并返回promise

return service(config)

}).catch( res=>{

//重新请求token失败,跳转到登录页

window.location.href = '/login '

} ).finally( ()=>{

//完成之后在关闭状态

isRefreshing = false

} )

}

}

--------------------------------------------------------------

同时发起两个或以上的请求时,其他接口如何重试

两个接口几乎同时发起和返回,第一个接口会进入刷新token后重试的流程,而第二个接口需要先存起来,然后等刷新token后再重试。同样,如果同时发起三个请求,此时需要缓存后两个接口,等刷新token后再重试; 当第二个过期的请求进来,token正在刷新,我们先将这个请求存到一个数组队列中,想办法让这个请求处于等待中,一直等到刷新token后再逐个重试清空请求队列。 将请求存进队列中后,同时返回一个Promise,让这个Promise一直处于Pending状态(即不调用resolve),此时这个请求就会一直等啊等,只要我们不执行resolve,这个请求就会一直在等待。当刷新请求的接口返回来后,我们再调用resolve,逐个重试。

// 是否正在刷新的标记

let isRefreshing = false

// 重试队列,每一项将是一个待执行的函数形式

let requests = []

-----------------------------------------------------------

// 说明token过期了,获取新的token

if (code === 401) {

const config = response.config

//判断一下状态

if( !isRefreshing ){

//修改状态,进入更新token阶段

isRefreshing = true

// 获取当前的请求

return refreshToken().then(res => {

// 刷新token成功,将最新的token更新到header中,同时保存在localStorage中

const { token } = res.data

service.setToken(token)

//重置失败请求的配置

config.headers['X-Token'] = token

config.baseURL = '' "

//已经刷新了token,将所有队列中的请求进行重试

requests.forEach(cb => cb(token))

// 重试完了别忘了清空这个队列

requests = []

return service(config)

}).catch( res=>{

//重新请求token失败,跳转到登录页

window.location.href = '/login '

} ).finally( ()=>{

//完成之后在关闭状态

isRefreshing = false

} )

} else{

// 正在刷新token,返回一个未执行resolve的promise

return new Promise((resolve) => {

// 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行

requests.push((token) => {

config.baseURL = ''

config.headers['X-Token'] = token

resolve(instance(config))

})

})

}

}

--------------------------------------------------------------

完整版

//在request.js

import axios from 'axios'

// 是否正在刷新的标记

let isRefreshing = false

// 重试队列,每一项将是一个待执行的函数形式

let requests = []

// 创建一个实例

const service = axios.create({

baseURL: process.env.VUE_APP_BASE_API,

timeout: 5000 // request timeout

})

// 从localStorage中获取token

function getLocalToken () {

const token = window.localStorage.getItem('token')

return token

}

// 给实例添加一个setToken方法,用于登录后将最新token动态添加到header,同时将token保存在localStorage中

service.setToken = (token) => {

instance.defaults.headers['X-Token'] = token

window.localStorage.setItem('token', token)

}

//获取新的token请求

function refreshToken () {

return service.post('/refreshtoken').then(res => res.data)

}

// 拦截返回的数据

service.interceptors.response.use(response => {

// 接下来会在这里进行token过期的逻辑处理

const { code } = response.data

-----------------------------------------------------------

// 说明token过期了,获取新的token

if (code === 401) {

const config = response.config

//判断一下状态

if( !isRefreshing ){

//修改状态,进入更新token阶段

isRefreshing = true

// 获取当前的请求

return refreshToken().then(res => {

// 刷新token成功,将最新的token更新到header中,同时保存在localStorage中

const { token } = res.data

service.setToken(token)

//重置失败请求的配置

config.headers['X-Token'] = token

config.baseURL = '' "

//已经刷新了token,将所有队列中的请求进行重试

requests.forEach(cb => cb(token))

// 重试完了别忘了清空这个队列

requests = []

return service(config)

}).catch( res=>{

//重新请求token失败,跳转到登录页

window.location.href = '/login '

} ).finally( ()=>{

//完成之后在关闭状态

isRefreshing = false

} )

} else{

// 正在刷新token,返回一个未执行resolve的promise

return new Promise((resolve) => {

// 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行

requests.push((token) => {

config.baseURL = ''

config.headers['X-Token'] = token

resolve(instance(config))

})

})

}

}

--------------------------------------------------------------

return response

}, error => {

return Promise.reject(error)

})

//暴露

export default service

优惠劵

GG·bond

关注

关注

20

点赞

158

收藏

觉得还不错?

一键收藏

知道了

7

评论

vue实际运用六:处理token过期

vue实际运用六:处理token过期1. 后端为了安全,token一般存在有效时间,当token过期,所有请求失效解决方案:1)在请求发起前拦截每个请求,判断token的有效时间是否已经过期,若已过期,则将请求挂起,先刷新token后再继续请求。优点: 在请求前拦截,能节省请求,省流量缺点: 需要后端额外提供一个token过期时间的字段;使用了本地时间判断,若本地时间被篡改,特别是本地时间比服务器时间慢时,拦截会失败使用方法:axios.interceptors.request.use() 这

复制链接

扫一扫

专栏目录

7 条评论

您还未登录,请先

登录

后发表或查看评论

GG·bond

CSDN认证博客专家

CSDN认证企业博客

码龄5年

暂无认证

56

原创

39万+

周排名

172万+

总排名

10万+

访问

等级

678

积分

28

粉丝

62

获赞

17

评论

362

收藏

私信

关注

热门文章

vue实际运用六:处理token过期

13496

判断iframe是否加载完成的完美方法

8048

前端工具下载

7395

前端-文件上传

6933

打印功能window.print()

5370

分类专栏

问题汇总

6篇

css常用

1篇

vue实际运用

14篇

vue基础知识

7篇

前端常用方法

14篇

JS原生方法

3篇

JS基础知识

7篇

前端工具、插件

4篇

uniapp

2篇

最新评论

vue实际运用六:处理token过期

三号航班浪客:

需要先配置axios,axios默认401会进到catch,你可以配置axios进入then或者直接在catch里处理它。ps:这里是response拦截器

Vue-路由传参的方法与区别

小怪兽凹凸曼:

使用path来匹配路由(或者name也可以),然后通过query来传递参数

里面父组件的方法一;里面path对应的应该是Child,而不是ChildView

vue实际运用六:处理token过期

zqr4818:

https://segmentfault.com/a/1190000020210980#item-7

vue实际运用六:处理token过期

zqr4818:

转载链接也不给一个

vue实际运用六:处理token过期

weixin_43292244:

关键是都401了,怎么获取新的token

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

TS-1-类型

vue2遇到问题--mixins中watch被多次调用

vant-swipe自适应图片高度+图片预览

2022年32篇

2021年24篇

目录

目录

分类专栏

问题汇总

6篇

css常用

1篇

vue实际运用

14篇

vue基础知识

7篇

前端常用方法

14篇

JS原生方法

3篇

JS基础知识

7篇

前端工具、插件

4篇

uniapp

2篇

目录

评论 7

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

token的原理及过期处理_token过期时间-CSDN博客

>

token的原理及过期处理_token过期时间-CSDN博客

token的原理及过期处理

最新推荐文章于 2024-01-12 11:59:55 发布

前端扫地僧

最新推荐文章于 2024-01-12 11:59:55 发布

阅读量1.7w

收藏

32

点赞数

7

文章标签:

vue.js

vuex

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_45839045/article/details/124260156

版权

Token 是用户登录成功之后服务端返回的一个身份令牌,在项目中的多个业务中需要使用到:

访问需要授权的 API 接口校验页面的访问权限…

但是我们只有在第一次用户登录成功之后才能拿到 Token。

所以为了能在其它模块中获取到 Token 数据,我们需要把它存储到一个公共的位置,方便随时取用。

往哪儿存?

本地存储

获取麻烦数据不是响应式 Vuex 容器(推荐)

获取方便响应式的 登录成功,将 Token 存储到 Vuex 容器中

获取方便响应式 为了持久化,还需要把 Token 放到本地存储

持久化

关于 Token 过期问题

登录成功之后后端会返回两个 Token:

token:访问令牌,有效期2小时refresh_token:刷新令牌,有效期14天,用于访问令牌过期之后重新获取新的访问令牌

我们的项目接口中设定的 Token 有效期是 2 小时,超过有效期服务端会返回 401 表示 Token 无效或过期了。

为什么过期时间这么短?

为了安全,例如 Token 被别人盗用

过期了怎么办?

让用户重新登录,用户体验太差了使用 refresh_token 解决 token 过期

服务器生成token的过程中,会有两个时间,一个是token失效时间,一个是token刷新时间,刷新时间肯定比失效时间长,当用户的 token 过期时,你可以拿着过期的token去换取新的token,来保持用户的登陆状态,当然你这个过期token的过期时间必须在刷新时间之内,如果超出了刷新时间,那么返回的依旧是 401。

处理流程:

在axios的拦截器中加入token刷新逻辑当用户token过期时,去向服务器请求新的 token把旧的token替换为新的token然后继续用户当前的请求

优惠劵

前端扫地僧

关注

关注

7

点赞

32

收藏

觉得还不错?

一键收藏

知道了

1

评论

token的原理及过期处理

Token 是用户登录成功之后服务端返回的一个身份令牌,在项目中的多个业务中需要使用到:访问需要授权的 API 接口校验页面的访问权限…但是我们只有在第一次用户登录成功之后才能拿到 Token。所以为了能在其它模块中获取到 Token 数据,我们需要把它存储到一个公共的位置,方便随时取用。往哪儿存?本地存储获取麻烦数据不是响应式Vuex 容器(推荐)获取方便响应式的登录成功,将 Token 存储到 Vuex 容器中获取方便响应式为了持久化,还需

复制链接

扫一扫

Vue 拦截器对token过期处理方法

08-28

下面小编就为大家分享一篇Vue 拦截器对token过期处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

请求时token过期自动刷新token操作

10-14

主要介绍了请求时token过期自动刷新token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1 条评论

您还未登录,请先

登录

后发表或查看评论

解决 微信公众号token一直莫名其妙出现token过期问题

最新发布

孤er尽悲欢绝的博客

01-12

474

解决 微信公众号token一直莫名其妙出现token过期问题

关于JWT Token 自动续期的解决方案

飘渺Jam的博客

07-16

7439

前言在前后端分离的开发模式下,前端用户登录成功后后端服务会给用户颁发一个jwt token。前端(如vue)在接收到jwt token后会将token存储到LocalStorage中。后...

前端刷新token,判断token是否过期,若没有过期则刷新token,过期则退出登录

baidu_39009276的博客

12-08

7343

前端刷新token,判断token是否过期,若没有过期则刷新token,过期则退出登录

token的处理及无感知刷新---个人理解向

m0_55918015的博客

05-18

3129

token是我们在登录系统后,后端会给我们返回的一个字段,我们需要在每次发送请求的时候,将token注入请求头,这样后端才能够给我们返回我们需要的信息。出于安全考虑,token的有效期一般是1-8小时,一般是2小时,那设想这样两个场景:

1.如果用户一天都在我们系统上打工,忙了九个小时,结果token过期了,没办法发送请求了,只能退出重新登录,重新获取新的token,肯定会影响用户体验的。我们需要token过期了,但是通过某种手段,让用户能够继续正常使用我们的系统,用户感觉不到。

2.用户如果一段时间,

token过期机制的问题

qq_46940224的博客

10-15

3720

浅谈一下token过期机制的问题

如何设置token有效期【5个应用场景分析+双token实现解析】

devops

05-10

1058

Token最常见的应用场景之一就是身份验证,验证token还有各种场景,你需要进一步了解token的有效期如何设置。

详解token已过期含义及解决方 token过期是否需要重新登录

专注java二开部署

05-21

2487

否则,客户端就重新登录即可。暂时没研究,有兴趣的朋友可以查查。详解token已过期含义及解决方 token过期是否需要重新登录Web应用和用户的身份验证息息相关,从单一服务器架构到分布式服务架构再到微服务架构,用户安全认证和授权的机制也一直在演进,下文对各个架构下的认证机制做个总结。说明:JWT 最适合的场景是不需要服务端保存用户状态的场景,但是如果考虑到 token 注销和 token 续签的场景话,没有特别好的解决方案,大部分解决方案都给 token 加上了状态,这就有点类似 Session 认证了。

jwt_token的有效时间和刷新时间

wo240的专栏

04-18

7961

有效时间和刷新时间都是固定的

1、token 的有效时间是说签发的 token 仅在 ttl 时间内可以用来正常使用 (鉴权,获取用户信息等操作),过了这个有效时间后,改 token 将被废弃,放入黑名单,路由中间件鉴权也将会失败。

2、刷新时间是指在 refresh_ttl 时间内,你可以使用之前签发的 token (此时已经失效了) 来换取一个新的 token,新的 token 的有效时间还是 ttl。后续的鉴权验证需要使用新的 token 才能正常通过。

用之前即将过期的 t..

权限认证框架sa-token的token有效期与实时续签

shengzhang_的博客

12-26

1万+

sa-token

sa-token 是一个非常强大的权限认证框架,其集成了诸多好用的特性,诸如:登录验证、权限验证、自定义session会话、踢人下线 等等均可以在框架中一行代码完成调用,官网地址:http://sa-token.dev33.cn/

sa-token的令牌有效期

sa-token 提供两种token自动过期策略,分别是timeout与activity-timeout,其详细用法如下:

timeout

timeout代表token的长久有效期,单位/秒,例如将其配置为2592000(30天)

前端token知识梳理:token如何存储?token过期如何处理?如何无感知刷新token?

Harley567

08-24

3877

token如何存储?token过期如何处理?如何无感刷新token?

PHP token验证生成原理实例分析

10-16

主要介绍了PHP token验证生成原理,结合实例形式分析了php的token验证原理与使用技巧,需要的朋友可以参考下

微信公众平台开发-如何保证access_token长期有效

05-06

博客教程《微信公众平台开发教程第22篇-如何保证access_token长期有效》的配套代码,教程地址如下:

http://blog.csdn.net/lyq8479/article/details/25076223

Android token过期刷新处理的方法示例

08-26

主要介绍了Android token过期刷新处理的方法示例,本文详细的介绍了2种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

token具有期效性,可能七天也可以十天

qq_34561253的博客

02-19

1176

类型         字段         说明token       string      token字符串,用于验证用户身份我登录的时候,系统会返回一个token值给我。下一次我去掉用一些接口的时候,比如要提交一些订单数据的时候必须要带上token值。如果没有带上token的话,系统会认为你是非法的。所以token是用来验证你的用户权限的。...

vue中对token的有效期的理解

热门推荐

黄钢的博客

09-16

2万+

保持登录是每个web页面必须要做的,不能一直不停的让用户进行登录,也不能让用户不登录就直接进入页面。token在保持登录中起到了非常重要的作用,我之前写过一篇博客,,这篇博客详细的说明了后端如何向前端传递token,前端如何将token保存在localstorage中,并通过请求拦截的方式判断token是否过期。我不确定这么写是否真的能起到作用,因为我后面写代码的时候,我发现我后端明明设定的token的有效期是10个小时,而本地localstorage中还一直有这个token并没有清除。

Spring Security OAuth2 Redis存储token refresh_token永不过期问题详解

OceanSky的专栏

07-27

1万+

1.先看几个实现类,然后再看源码分析这样会更清晰

OAuth2AccessToken接口的默认实现是DefaultOAuth2AccessToken类(自带过期时间属性)

OAuth2RefreshToken接口的默认实现是DefaultOAuth2RefreshToken类(不带过期时间属性)

ExpiringOAuth2RefreshToken接口父接口是OAuth2RefreshToke...

token过期前端怎么处理

07-27

对于前端来说,当 token 过期时,可以采取以下几种处理方式: 1. 检测到 token 过期后,可以强制用户重新登录,获取新的有效 token。这通常是最常见也是最安全的处理方式。用户在登录页面输入正确的凭证后,前端向...

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

前端扫地僧

博客等级

码龄4年

72

原创

31

点赞

122

收藏

18

粉丝

关注

私信

热门文章

token的原理及过期处理

17151

cookie、session、token的区别

6054

ajax提交数据中formdata的使用

5399

JavaScript中for 循环和foreach的区别

3416

token的理解与使用

3373

最新评论

token的原理及过期处理

renjunqing:

真是奇葩的逻辑,用一个过期的token换取正常token,还要有效期干什么?

前端学习之 ajax中实现post上传文件并展示进度条组件

CodingZn:

全是废话,上传文件一点干货没有

前端学习之JavaScript 三大系列的区别和用法

猿猿子:

写得马马虎虎,不错不错,建议贵公司录取(doge

前端学习之JavaScript 三大系列的区别和用法

m0_69073925:

写得很好,孩子学了马上就能编页面了

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

图片懒加载的原理

cookie、session、token的区别

vue2和vue3的区别

2022年58篇

2021年14篇

目录

目录

最新文章

图片懒加载的原理

cookie、session、token的区别

vue2和vue3的区别

2022年58篇

2021年14篇

目录

评论 1

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

关于Token 自动续期的解决方案 - 知乎

关于Token 自动续期的解决方案 - 知乎首发于JAVA日知录切换模式写文章登录/注册关于Token 自动续期的解决方案JAVA日知录前言在前后端分离的开发模式下,前端用户登录成功后后端服务会给用户颁发一个jwt token。前端(如vue)在接收到jwt token后会将token存储到LocalStorage中。后续每次请求都会将此token放在请求头中传递到后端服务,后端服务会有一个过滤器对token进行拦截校验,校验token是否过期,如果token过期则会让前端跳转到登录页面重新登录。因为jwt token中一般会包含用户的基本信息,为了保证token的安全性,一般会将token的过期时间设置的比较短。但是这样又会导致前端用户需要频繁登录(token过期),甚至有的表单比较复杂,前端用户在填写表单时需要思考较长时间,等真正提交表单时后端校验发现token过期失效了不得不跳转到登录页面。如果真发生了这种情况前端用户肯定是要骂人的,用户体验非常不友好。本篇内容就是在前端用户无感知的情况下实现token的自动续期,避免频繁登录、表单填写内容丢失情况的发生。实现原理jwt token自动续期的实现原理如下:登录成功后将用户生成的 jwt token 作为key、value存储到cache缓存里面 (这时候key、value值一样),将缓存有效期设置为 token有效时间的2倍。当该用户再次请求时,通过后端的一个 jwt Filter 校验前端token是否是有效token,如果前端token无效表明是非法请求,直接抛出异常即可;根据规则取出cache token,判断cache token是否存在,此时主要分以下几种情况:cache token 不存在这种情况表明该用户账户空闲超时,返回用户信息已失效,请重新登录。cache token 存在,则需要使用jwt工具类验证该cache token 是否过期超时,不过期无需处理。过期则表示该用户一直在操作只是token失效了,后端程序会给token对应的key映射的value值重新生成jwt token并覆盖value值,该缓存生命周期重新计算。实现逻辑的核心原理:前端请求Header中设置的token保持不变,校验有效性以缓存中的token为准。代码实现(伪码)登录成功后给用户签发token,并设置token的有效期...

SysUser sysUser = userService.getUser(username,password);

if(null !== sysUser){

String token = JwtUtil.sign(sysUser.getUsername(),

sysUser.getPassword());

}

...

public static String sign(String username, String secret) {

//设置token有效期为30分钟

Date date = new Date(System.currentTimeMillis() + 30 * 60 * 1000);

//使用HS256生成token,密钥则是用户的密码

Algorithm algorithm = Algorithm.HMAC256(secret);

// 附带username信息

return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm);

}

将token存入redis,并设定过期时间,将redis的过期时间设置成token过期时间的两倍Sting tokenKey = "sys:user:token" + token;

redisUtil.set(tokenKey, token);

redisUtil.expire(tokenKey, 30 * 60 * 2);

过滤器校验token,校验token有效性public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

//从header中获取token

String token = httpServletRequest.getHeader("token")

if(null == token){

throw new RuntimeException("illegal request,token is necessary!")

}

//解析token获取用户名

String username = JwtUtil.getUsername(token);

//根据用户名获取用户实体,在实际开发中从redis取

User user = userService.findByUser(username);

if(null == user){

throw new RuntimeException("illegal request,token is Invalid!")

}

//校验token是否失效,自动续期

if(!refreshToken(token,username,user.getPassword())){

throw new RuntimeException("illegal request,token is expired!")

}

...

}

实现token的自动续期public boolean refreshToken(String token, String userName, String passWord) {

Sting tokenKey = "sys:user:token" + token ;

String cacheToken = String.valueOf(redisUtil.get(tokenKey));

if (StringUtils.isNotEmpty(cacheToken)) {

// 校验token有效性,注意需要校验的是缓存中的token

if (!JwtUtil.verify(cacheToken, userName, passWord)) {

String newToken = JwtUtil.sign(userName, passWord);

// 设置超时时间

redisUtil.set(tokenKey, newToken) ;

redisUtil.expire(tokenKey, 30 * 60 * 2);

}

return true;

}

return false;

}

...

public static boolean verify(String token, String username, String secret) {

try {

// 根据密码生成JWT效验器

Algorithm algorithm = Algorithm.HMAC256(secret);

JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build();

// 效验TOKEN

DecodedJWT jwt = verifier.verify(token);

return true;

} catch (Exception exception) {

return false;

}

}

本文中jwt的相关操作是基于 com.auth0.java-jwt 实现,大家可以通过阅读原文获取 JwtUtil 工具类。小结jwt token实现逻辑的核心原理是 前端请求Header中设置的token保持不变,校验有效性以缓存中的token为准,千万不要直接校验Header中的token。实现原理部分大家好好体会一下,思路比实现更重要!如果本文对你有帮助,别忘记给我个三连:点赞,转发,评论。咱们下期见!收藏 等于白嫖,点赞 才是真情!这里为大家准备了一份小小的礼物,关注公众号,输入如下代码,即可获得百度网盘地址,无套路领取!001:《程序员必读书籍》002:《从无到有搭建中小型互联网公司后台服务架构与运维架构》003:《互联网企业高并发解决方案》004:《互联网架构教学视频》006:《SpringBoot实现点餐系统》007:《SpringSecurity实战视频》008:《Hadoop实战教学视频》009:《腾讯2019Techo开发者大会PPT》010: 微信交流群发布于 2020-07-23 08:18前后端分离token后端技术​赞同 24​​25 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录JAVA日知录公众号同名专栏,专注微服务,架构,数据库等

对于token的认证,如何保证token的及时刷新? - 知乎

对于token的认证,如何保证token的及时刷新? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册Web 开发JSON Web Token(JWT)token对于token的认证,如何保证token的及时刷新?1,在拦截器里对将要过期的token 的进行刷新。(一个页面可能n个请求同时发出,也就是说 refresh_token 要支持多个,这个不算最好的解决…显示全部 ​关注者26被浏览88,005关注问题​写回答​邀请回答​好问题​添加评论​分享​4 个回答默认排序张少林同学​ 关注前言记录一下前后端分离下————token超时刷新策略!需求场景昨天发了一篇记录 前后端分离应用——用户信息传递 中介绍了token认证机制,跟几位群友讨论了下,有些同学有这么一个疑惑:token失效了,应该怎么做?强制定向到登录页?其实理论上如果是活跃用户,token失效后,假如用户正在操作表单,此时突然定向到登录页面,那用户体验太差了。实现目标延长token过期时间活跃用户在token过期时,在用户无感知的情况下动态刷新token,做到一直在线状态不活跃用户在token过期时,直接定向到登录页登录返回字段如何签发token,请看上一篇推文,这里不做过多介绍。先看看登录接口返回的数据如下: 1@Data

2public class LoginVo implements Serializable {

3

4 private static final long serialVersionUID = 6711396581310450023L;

5

6 //...省略部分业务字段

7

8 /**

9 * token令牌 过期时间默认15day

10 */

11 private String jwt;

12

13 /**

14 * 刷新token 过期时间可以设置为jwt的两倍,甚至更长,用于动态刷新token

15 */

16 private String refreshJwt;

17

18 /**

19 * token过期时间戳

20 */

21 private Long tokenPeriodTime;

22

23}

具体返回字段的意义请看注释,这里再简要说明:jwt:用户正常访问接口时提交的token,过期时间设置长一些,15day吧refreshJwt:刷新token 过期时间可以设置为jwt的两倍,甚至更长,用于动态刷新token时候提交后台验证tokenPeriodTime:token过期时间戳,前端每次调用接口前需要主动判断是否已经过期,如果过期则提交refreshJwt访问token刷新的接口进行刷新动态刷新token前端检测到token过期后,携带refreshJwt访问后台刷新token的接口,服务端在拦截器中依然对refreshJwt进行解析鉴权假如refreshJwt也过期了,提示登录过期,强制跳转登录页假如refreshJwt还在有效期,则签发新的token返回,前端使用最新的token进行接口请求总结如果是活跃用户,那么允许他在refreshJwt过期时间与token过期时间的差值这段时间内,不停的动态刷新token,使其做到无感知的状态下一直保持登录状态如果用户不活跃,在refreshJwt过期时间到了,依然没有使用系统,那么将判定为不活跃用户,此时应当重定向到登录页了最后篇幅较短,主要是延续上一篇 前后端分离应用——用户信息传递 遗留问题做一下总结。如果你有更好的做法,欢迎留言告知我,谢谢啦。后续会不定期更新原创文章,欢迎关注公众号 「张少林同学」!编辑于 2019-01-22 12:22​赞同 16​​7 条评论​分享​收藏​喜欢收起​编程乐趣​ 关注这是我之前分享在星球里面的课程,下面整理下,分享下这个无感刷新Token技术方案。我们都知道Token是有设置有效期的,为了安全都不会设置过长的有效期;但设置有效期太短,又会导致经常需要重新登录。这就需要无感刷新Token的方案,来提升用户体验。目前比较常用的方案是:双token机制。1、登录时同时返回:Token、RefreshToken,Token用于请求业务接口,RefreshToken用于刷新Token接口;2、每一次Http请求,客户端都会判断服务器返回状态,如果是401,代表Token过期;3、客户端使用RefreshToken,请求服务器Token刷新接口,并获取新的:Token,RefreshToken;4、如果第3步骤成功返回,更新本地的Token、RefreshToken;如果返回失败,代表RefreshToken也过期了,提示过期并跳转至登录页面。下面我们一起看下实现步骤:1、后台登录接口登录验证,验证用户名和密码,验证通过返回Token。登录接口返回的2个内容:Token和RefreshToken,这两个有效期不一样,比如Token有效期是30分钟,RefreshToken有效期是60分钟。2、后台刷新token接口和登录接口一样,也是返回:Token和RefreshToken。3、前端登录功能在前端登录页面,成功登录后,把Token和RefreshToken存储在本地,可以存储在Cookie或者LocalStorage。4、错误响应拦截器axios响应拦截器添加如下代码:a、判断Http返回状态是否为401。b、判断是否授权信息是否使用refreshToken,调用刷新token接口,同样也会发起Http请求,如果refreshToken也过期了,同样会返回401;所以这边要加判断,避免进入死循环。c、如果refreshToken也过期了,直接跳转至登录页面。d、如果调用刷新token接口成功返回,更新本地存储的Token、RefreshToken;并获取上一次业务请求的内容,并更新验证信息,重新发起上一次业务请求,这样才能实现无感刷新。5、实现效果最终实现效果如下:1、请求用户列表接口,返回401;2、调用token刷新接口;3、重新请求用户列表接口。在这过程中,第一次发起用户搜索请求是失败的,我们马上刷新token,并重新发起第二次用户搜索请求,但对用户来说是透明、毫无察觉的。好了,今天就分享到这了。顺便分享一个资料:最后,如果对你有帮助,欢迎点赞、收藏!- End -发布于 2024-02-02 23:28​赞同 1​​1 条评论​分享​收藏​喜欢收起​​

前端请求token过期时,刷新token的处理-腾讯云开发者社区-腾讯云

token过期时,刷新token的处理-腾讯云开发者社区-腾讯云挥刀北上前端请求token过期时,刷新token的处理关注作者腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具TVP最新优惠活动文章/答案/技术大牛搜索搜索关闭发布登录/注册首页学习活动专区工具TVP最新优惠活动返回腾讯云官网挥刀北上首页学习活动专区工具TVP最新优惠活动返回腾讯云官网社区首页 >专栏 >前端请求token过期时,刷新token的处理前端请求token过期时,刷新token的处理挥刀北上关注发布于 2019-07-19 15:47:4120.7K3发布于 2019-07-19 15:47:41举报文章被收录于专栏:Node.js开发Node.js开发在前端开发中,我们经常会遇到使用token,token的作用是要验证用户是否处于登录状态,所以要请求一些只有登录状态才能查看的资源的时候,我们需要携带token。一般的后端接口设置的token是有时效的,超时后就会失效,失效之后的处理策略一般会做两种处理,一种是直接跳转到登录页面,重新登录。流程图如下:另外一种如果返回 token失效的信息,自动去刷新token,然后继续完成未完成的请求操作。流程图如下:但是此时我们要考虑一个问题,通常一个页面中不只是发送一个异步请求,可能会同时发送多个异步请求,下面我们用流程图来描述一下一个页面同时发送多个请求的情况,并且者多个请求都需要验证token,图示如下:我们发现,如果出现上述情况,token会被多次刷新,除了第一次判断token失效后,进行刷新token的操作,其余的刷新token都是多余的,我们应该怎么处理呢?首先咱们根据现实中的场景来模拟一下上面的获取token与刷新token的动作:比如有5个人同时去买票,这里为了与是刷新token的场景类似,五个人从5个通道来买票,彼此并不知道还有其他四个人也来买票,这五个人都发现买票窗口没人,此时按照刚才的场景,可能会出现如下情况,五个人,每个人都会去呼叫叫售票员,然后完成买票,还有一种情况是,其中某一个人去叫售票员,并且会在售票窗后贴一个纸条,告诉其他几个人,售票员马上来,其他四个人只需要等待即可。第一种场景图示如下:这种场景会出现上面情况呢?可能会来五个售票员。。。第二种场景图示如下:结合买票与刷新token的场景,我们再次观察上面完成的伪代码,我么需要如下几个工具,纸条,观察者。纸条应该是一个变量,其他用户通过这个变量来判断是否去刷新token,观察者,当售票员回来,或者token刷新完成,其他几个用户再次去完成业务逻辑。最终的业务流程图如下:伪代码实现如下:const axios = require("axios");

// 封装请求

function request(url, options) {

const token = localStorage.getItem('token');

const defaultOptions = {

headers: {

Authorization: `Bearer ${token}`,

},

withCredentials: true,

url: url,

baseURL: BASE_URL,

};

const newOptions = { ...options, ...defaultOptions };

return axios.request(newOptions)

.then(checkStatus)

.catch(error => console.log(error));

}

// 默认纸条

let isRefreshing = true;

function checkStatus(response) {

if (response && response.code === 1002) {

// 刷新token的函数,这需要添加一个开关,防止重复请求

if(isRefreshing){

refreshTokenRequst()

}

isRefreshing = false;

// 将当前的请求保存在观察者数组中

const retryOriginalRequest = new Promise((resolve) => {

addSubscriber(()=> {

resolve(request(url, options))

})

});

return retryOriginalRequest;

}else{

return response;

}

}

function refreshTokenRequst(){

let data;

const refreshToken = localStorage.getItem('refreshToken');

data={

authorization: 'YXBwYXBpczpaSWxhQUVJdsferTeweERmR1praHk=',

refreshToken,

}

axios.request({

baseURL: BASE_URL,

url:'/app/renewal',

method: 'POST',

data,

}).then((response)=>{

// 刷新完成后,将刷新token和refreshToken存储到本地

localStorage.setItem('refreshToken',response.data.refreshToken);

localStorage.setItem('token',response.data.token);

// 并且将所有存储到观察者数组中的请求重新执行。

onAccessTokenFetched();

// 纸条撕掉

isRefreshing = true;

});

}

// 观察者

let subscribers = [];

function onAccessTokenFetched() {

subscribers.forEach((callback)=>{

callback();

})

subscribers = [];

}

function addSubscriber(callback) {

subscribers.push(callback)

}复制可以看到纸条相当于变量isRefreshing,观察者相当于数组subscribers。以上便是token失效时的处理策略本文参与 腾讯云自媒体分享计划,分享自微信公众号。原始发表:2019-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除编程算法其他本文分享自 nodejs全栈开发 微信公众号,前往查看如有侵权,请联系 cloudcommunity@tencent.com 删除。本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!编程算法其他评论登录后参与评论0 条评论热度最新登录 后参与评论推荐阅读LV.关注文章0获赞0领券社区专栏文章阅读清单互动问答技术沙龙技术视频团队主页腾讯云TI平台活动自媒体分享计划邀请作者入驻自荐上首页技术竞赛资源技术周刊社区标签开发者手册开发者实验室关于社区规范免责声明联系我们友情链接腾讯云开发者扫码关注腾讯云开发者领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL 数据库SSL 证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569腾讯云计算(北京)有限责任公司 京ICP证150476号 |  京ICP备11018762号 | 京公网安备号11010802020287问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档Copyright © 2013 - 2024 Tencent Cloud.All Rights Reserved. 腾讯云 版权所有登录 后参与评论300

详解token已过期含义及解决方 token过期是否需要重新登录-CSDN博客

>

详解token已过期含义及解决方 token过期是否需要重新登录-CSDN博客

详解token已过期含义及解决方 token过期是否需要重新登录

最新推荐文章于 2024-03-07 11:12:40 发布

CRMEB商城系统

最新推荐文章于 2024-03-07 11:12:40 发布

阅读量1w

收藏

10

点赞数

文章标签:

java

数据库

redis

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_64051447/article/details/130860602

版权

详解token已过期含义及解决方 token过期是否需要重新登录Web应用和用户的身份验证息息相关,从单一服务器架构到分布式服务架构再到微服务架构,用户安全认证和授权的机制也一直在演进,下文对各个架构下的认证机制做个总结。单一服务器架构该架

Web应用和用户的身份验证息息相关,从单一服务器架构到分布式服务架构再到微服务架构,用户安全认证和授权的机制也一直在演进,下文对各个架构下的认证机制做个总结。

单一服务器架构

该架构下后端只有一台服务器提供服务。

认证授权流程:

1.Web应用中设置拦截器对所有请求进行拦截,如果校验不通过则跳转登陆重新认证

2.客户端发起认证请求,传入用户名密码

3.通过验证后,应用在服务器上将用户信息存入session中,并将session id返回给客户端

4.客户端将session id存在本地cookie或local storage中,再次访问时传入session id

5.Web应用根据session id对比服务器的session数据,确认用户身份

适合场景

这种模式只适合单服务器的场景

常用实现

shiro ;自定义注解 + 拦截器/AOP方案;filter方案等

缺陷

如果是分布式服务或跨域体系架构的系统则会出现session无法共享的问题。

如何解决

解决方案有两种,第一种是将session统一存放,实现分布式session共享,第二种方案是客户端生成token

分布式服务架构

分布式服务架构下,后端的服务器由一台变成了多台。

Session共享方案

认证授权流程:

1.使用nginx做负载均衡,多台web应用

2.客户端发起认证请求,根据策略到其中一台web

3.通过验证后,服务端将用户的信息存入持久化层,例如redis缓存数据库,再生成token令牌

4.并将生成的token返回客户端,存入客户端缓存。

5.客户端再次访问web,根据策略路由到其中一台,web应用查询持久化层,根据带入的token查询用户登陆信息,确认身份。

适合场景

并发量不高的分布式应用

常用实现

shiro ;自定义注解 + 拦截器/AOP方案;filter方案等

缺陷

1、这种方案的缺陷在于依赖于持久层的数据库如redis,会有单点风险,如果持久层失败,整个认证体系都会挂掉;

2、每一次调用都需要访问持久化层进行验证,会给持久化层造成压力,在高并发场景,持久化层容易成为瓶颈;

如何解决

持久层的数据库如redis做高可用和集群。

客户端token方案

认证授权流程:

1.客户端发起认证请求,根据策略到其中一台web

2.通过验证后,服务端将用户登陆信息封装成token(token本身可以自解释)返回给客户端,不存储在服务端

3.客户端将返回的完整信息存入缓存。

4.客户端再次访问web,根据策略路由到其中一台,带入登陆信息,服务端根据信息确认身份。

适合场景

优势在于服务端不保存用户会话数据,服务端无状态,不用去持久层查询从而增加了效率,适合一次性验证、restful api 的无状态认证、并发量较高的分布式应用等

常用实现

jwt

缺陷

token一旦下发便不受服务端控制,如果发生token泄露,服务器也只能任其蹂躏,在其未过期期间不能有任何措施,同时存在以下两个问题:

1、失效问题,因为token是存放在客户端的,服务端无法主动让token失效,比如踢人下线、用户权限发生变化等场景就实现不了

2、续签问题,token 有效期一般都建议设置的不太长, token 过期后用户需要重新登录,导致用户需要频繁登录

如何解决

针对失效问题:

① 将 token 存入内存数据库:将 token 存入 DB 或redis中。如果需要让某个 token 失效就直接从 redis 中删除这个 token 即可。但是,这样会导致每次使用 token 发送请求都要先从redis中查询 token 是否存在的步骤,而且违背了 JWT 的无状态原则,不可取。

② 黑名单机制:使用内存数据库比如 redis 维护一个黑名单,如果想让某个 token 失效的话就直接将这个 token 加入到 黑名单 即可。然后,每次使用 token 进行请求的话都会先判断这个 token 是否存在于黑名单中。

针对续签问题:

① 类似于 Session 认证中的做法: 假设服务端给的 token 有效期设置为30分钟,服务端每次进行校验时,如果发现 token 的有效期马上快过期了,服务端就重新生成 token 给客户端。客户端每次请求都检查新旧token,如果不一致,则更新本地的token。这种做法的问题是仅仅在快过期的时候请求才会更新 token ,对客户端不是很友好。每次请求都返回新 token :这种方案的的思路很简单,但是,很明显,开销会比较大。

② 用户登录返回两个 token :第一个是 acessToken ,它的过期时间比较短,不如1天;另外一个是 refreshToken 它的过期时间更长一点比如为10天。客户端登录后,将 accessToken和refreshToken 保存在客户端本地,每次访问将 accessToken 传给服务端。服务端校验 accessToken 的有效性,如果过期的话,就将 refreshToken 传给服务端。如果 refreshToken 有效,服务端就生成新的 accessToken 给客户端。否则,客户端就重新登录即可。

说明:JWT 最适合的场景是不需要服务端保存用户状态的场景,但是如果考虑到 token 注销和 token 续签的场景话,没有特别好的解决方案,大部分解决方案都给 token 加上了状态,这就有点类似 Session 认证了。

微服务架构

微服务架构下服务端根据业务拆分为多个服务,除了公司内部服务外,外部客户或者第三方也通过api网关统一转发请求,在这个阶段系统需要提供跨系统单点登录、第三方授权登录等基础能力。在这种架构下后端建立单独的认证授权中心。 目前实现统一身份认证和授权的技术手段较多,总体可以归纳为以下几类。

传统的 Cookie + Session 解决方案 ,有状态会话模式

认证授权流程:

同分布式服务架构中的“Session共享方案”

适合场景:

同分布式服务架构中的“Session共享方案”

常用实现:

同分布式服务架构中的“Session共享方案”

缺陷:

分布式 Session 是老牌的成熟解决方案,但因其状态化通信的特性与微服务提倡的API导向无状态通信相互违背,且共享式存储存在安全隐患,因此微服务一般不太采用

JWT+网关撤销令牌方案,无状态交互模式

认证授权流程:

同分布式服务架构中的“客户端token方案”,只是在该基础上,加上API网关令牌失效和令牌续签的机制,参考分布式服务架构中的“Session共享方案”的“如何解决”部分。

适合场景:

同分布式服务架构中的“客户端token方案”

常用实现:

同分布式服务架构中的“客户端token方案”

缺陷:

同分布式服务架构中的“客户端token方案”

JWT + OAutstrong.0 +CAS方案

CAS是单点登录的解决方案,单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS共涉及角色有:CAS Client(下文提到的系统A等)、User、CAS Server(认证中心)。CAS 是一个认证框架,其本身定义了一套灵活完整的认证流程,但其兼容主流的认证和授权协议如 OAutstrong、SAML、OpenID 等,因此一般采用 CAS + OAutstrong 的方案实现 SSO 和授权登录。

认证授权流程:

1.用户访问系统A;

2.系统A发现用户没有登录,也没有ticket,重定向到认证中心;有ticket跳转 第7步;

3.认证中心发现用户并未登录,展示登录页面;

4.用户登录;

5.认证中心登录成功,带着生成的ticket,重定向到之前的系统A页面;

6.系统A检查登录,还是未登录,但存在ticket。系统A带着ticket和认证中心进行校验;

7.认证中心返回对应的用户名;

8.系统A检查返回的用户名是否只有一个且不为空,若是,则返回给用户指定的资源信息;若不是,则跳转 第2步。

常用实现

spring security + CAS

OAutstrong.0协议考虑到了微服务认证中的方方面面,提供的多种授权模式。这种方案的优点是安全性好,是业内成熟的给第三方提供授权登录解决方案,但是实现成本和复杂度高。 OAutstrong.0提供了4种授权模式,能够适应多种场景,作为基于令牌的安全框架,可以广泛用于需要统一身份认证和授权的场景。 在 OAutstrong.0 的实施过程中,一般会采用 JWT 作为令牌的主要标准。以文章分享举个例子,你在(登录后)浏览某论坛时,遇到了一篇好文章,想要分享给大家时,你需要登录(扫码或者登录用户名密码)第三方账户如来完成分享。

OAutstrong.0还有个替代方案,OIDC,它是OpenID Connect的简称,OIDC=(Identity, Authentication) + OAuth 2.0。它在OAutstrong上构建了一个身份层,是一个基于OAutstrong协议的身份认证标准协议。暂时没研究,有兴趣的朋友可以查查。

认证授权流程:

1、在点击分享链接时,主服务器会直接(接口)请求第三方服务器,第三方服务器会校验主服务器上的用户此时是否授权给自己(第三方);

2、没有授权信息,用户登录(扫描或者密码)。

3、主服务器拿着用户的登录信息去第三方确认认证授权(密码是否正确、是否授权)。

4、认证失败,密码错误。(重新登录)

5、认证成功(确认授权),第三方认证服务会返回的授权码。

6、主服务器带着授权码请求第三方资源服务器,第三方资源服务器会返回指定的URI(分享界面)。

7、用户操作分享操作(填写自己的话语),点击分享按钮完成。

常用实现

spring security +OAutstrong.0

OAutstrong.0提供了4种授权模式,如下:

授权码模式

授权码模式相对其他三个模式来说是功能最完整,流程最安全严谨的授权方式。它的特点是通过客户端的后台服务器与服务提供商的认证服务器进行交互:

A. 用户访问客户端,客户端将用户导向认证服务器,需要携带客户端ID凭证和重定向URI。

B. 用户选择是否给予客户端授权。

C. 假设用户给予授权,认证服务器将用户导向事先指定的重定向URI,同时附上一个授权码。

D. 客户端收到授权码后,携带事先指定的重定向URI和授权码向认证服务器申请令牌。

E. 认证服务器核对授权码和重定向URI,确认无误后,向客户端颁发访问令牌(access token)和刷新令牌(refresh token)。

这里的resource owner代表客户,user-agent代表客户使用的访问工具如浏览器或App,client指第三方客户端

简化模式

简化模式不通过服务端程序来完成,比授权码模式减少了“授权码”这个步骤,直接由浏览器发送请求获取令牌,令牌对访问者是可见的,且客户端不需要认证,这种模式一般用于无后端应用,如手机/桌面客户端程序、浏览器插件

A. 用户访问客户端,客户端将用户导向认证服务器,需要携带客户端ID凭证和重定向URI。

B. 用户选择是否给予客户端授权。

C. 假设用户给予授权,认证服务器将用户导向事先指定的重定向URI,并在URI的Hash部分包含了访问令牌(Fragment)。

D. 浏览器向资源服务器发出请求,其中不包含事先收到的Hash部分(Fragment)。

E. 资源服务器返回一段脚本,其中包含的代码可以获取Hash部分中的令牌。

F. 浏览器执行事先获取的脚本,提取出令牌

G. 浏览器将令牌发送给客户端。

密码模式

密码模式中,用户向客户端提供用户名和密码,客户端使用这些信息,直接向认证服务器索要授权。这种模式违背了前面提到的微服务安全要解决的问题(不暴露用户名和密码),但是在一些用户对客户端高度信任的情况下,例如公司内部软件间的授权下,使用这种模式也是适用的

A. 用户向客户端提供用户名和密码。

B. 客户端将用户名和密码发送给认证服务器,向认证服务器索要令牌。

C. 认证服务器确认无误后,向客户端提供访问令牌。

客户端模式

客户端模式是客户端以自己的名义去授权服务器申请授权令牌,并不是完全意义上的授权。一般不适用这种模式

A. 客户端向认证服务器进行身份认证,并要求获取访问令牌。

B. 认证服务器确认无误后,向客户端提供访问令牌。

刷新令牌

如果用户访问的时候,客户端的"访问令牌"已经过期,则需要使用"更新令牌"申请一个新的访问令牌

A. 客户端向认证服务器进行身份认证,并要求获取访问令牌。

B. 认证服务器确认无误后,返回访问令牌和一个刷新令牌。

C. 客户端通过访问令牌访问受保护资源。

D. 如果访问令牌未过期,则向客户端提供资源服务。

E. 客户端通过访问令牌访问受保护资源。

F. 如果访问令牌过期,受保护资源服务器返回Invalid Token Error。

G. 客户端得到上方的错误后,通过刷新令牌向授权服务器申请一个新的访问令牌。

H. 认证服务器确认无误后,返回访问令牌和一个刷新令牌。

优惠劵

CRMEB商城系统

关注

关注

0

点赞

10

收藏

觉得还不错?

一键收藏

打赏

知道了

0

评论

详解token已过期含义及解决方 token过期是否需要重新登录

否则,客户端就重新登录即可。暂时没研究,有兴趣的朋友可以查查。详解token已过期含义及解决方 token过期是否需要重新登录Web应用和用户的身份验证息息相关,从单一服务器架构到分布式服务架构再到微服务架构,用户安全认证和授权的机制也一直在演进,下文对各个架构下的认证机制做个总结。说明:JWT 最适合的场景是不需要服务端保存用户状态的场景,但是如果考虑到 token 注销和 token 续签的场景话,没有特别好的解决方案,大部分解决方案都给 token 加上了状态,这就有点类似 Session 认证了。

复制链接

扫一扫

VS2017 C# 获取微信token及验证access_token是否过期

02-23

本代码演示通过VS2017 C# 获取微信token及验证access_token是否过期,以及通过access_token读取云中存储的数据。

今天和大家分享一下 token 失效的处理方式

徐飞的博客

03-16

2万+

面试官:说说token失效的处理方式

参与评论

您还未登录,请先

登录

后发表或查看评论

关于 Token 过期问题的两种解决方案

m0_65812066的博客

01-06

2万+

手动更新token。拿到最新的token值后再重新发起刚刚因token过期的请求。2.refresh_token也有过期的时候,这时只能强行让用户自己重新登入了。手动更新token。拿到最新的token值后再跳回之前浏览的页面。时候,我们自己手动添加请求头为refresh_token。注意:1. 在请求响应器中做判断在非。请求头配置token,而。

K8S Dashboard登录Token过期问题处理

alksjdfp32r的博客

01-03

753

K8S Dashboard登录Token过期问题处理

Spring Security Oauth2 认证(获取token/刷新token)流程(password模式)

热门推荐

凶猛的小蜜蜂

05-11

17万+

1.本文介绍的认证流程范围

本文主要对从用户发起获取token的请求(/oauth/token),到请求结束返回token中间经过的几个关键点进行说明。

2.认证会用到的相关请求

注:所有请求均为post请求。

获取access_token请求(/oauth/token)

请求所需参数:client_id、client_secret、grant_type、username、passwo...

Android token过期刷新处理的方法示例

08-26

主要介绍了Android token过期刷新处理的方法示例,本文详细的介绍了2种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

JWT 讲解与 token 过期自动续期解决方案

weixin_43249535的博客

01-09

2万+

JWT 讲解 与 token 过期自动续期解决方案1.什么是token2.什么是JWT3.token过期自动续费方案3.1 token过期3.2 解决方案

1.什么是token

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。

使用tok

token 过期的处理方案有哪些?

生命不息,挖坑不止

06-29

1万+

在用户登录时,除了发放一个访问令牌(Access Token)以外,再发放一个刷新令牌(Refrsh Token)。当访问令牌过期时,使用刷新令牌向服务器请求新的访问令牌。当访问令牌过期时,跳转回登录界面,让用户重新登录。这种方式的优点是可以避免用户频繁登录,但需要妥善保管刷新令牌,因为它的安全性比访问令牌更高。这种方式的优点是用户只要频繁访问,就不需要登录,但可能会增加服务器负担。用户每次使用使用访问令牌时,服务器都会更新访问令牌的过期时间。访问令牌的有效期比较短,刷新令牌的有效期比较长。

JWT的token过期自动续期(无redis)

qq_1641486826的博客

01-19

7870

思路:

由于jwt中的token过期时间是打包在token中的,用户登录以后发送给客户端以后token不能变化,那么要在用户无感知的情况下刷新token,就要在符合过期条件的情况下,在缓存一个新的token,作为续命token,再次解析不要解析客户端发送的token,要解析自己缓存的续命token

主要逻辑:

如果当前token没有超过过期时间的两倍,续期,超过了重新登录

主要代码如下:

package com.hongseng.app.config.jwtfilter;

import enums.Tok

JWT续期问题,ChatGPT解决方案

全栈行动派的博客

03-04

6677

JWT(JSON Web Token)通常是在用户登录后签发的,用于验证用户身份和授权。JWT 的有效期限(或称“过期时间”)通常是一段时间(例如1小时),过期后用户需要重新登录以获取新的JWT。然而,在某些情况下,用户可能会在JWT到期之前使用应用程序,这可能会导致应用程序不可用或需要用户重新登录。为了避免这种情况,解决方案:刷新令牌(Refresh Token)、自动延长JWT有效期

JWT过期处理——单token方案

weixin_44347271的博客

12-04

9312

前后端分离的项目中采用jwt作为接口的安全机制会遇到jwt过期的问题。

jwt中可以设置过期时间,即使是设置成一个月,但可能用户正上一秒还在使用,下一秒jwt过期被叫去重新登录,这是不能接受的,所以需要有处理jwt过期的机制。

在这个问题上比较常用的做法是采用双token——access token和refresh token来处理,access token用户授权,refresh token用于前者过期后获取新的access token。

这里。

我在这里记录我单token方案的思路。

用户登录时生成t

Vue利用路由钩子token过期后跳转到登录页的实例

11-26

在Vue2.0中的路由钩子主要是用来拦截导航,让它完成跳转或前取消,可以理解为路由守卫。

分为全局导航钩子,单个路由独享的钩子,组件内钩子。

三种 类型的钩子只是用的地方不一样,都接受一个函数作为参数,函数传入三个参数,分别为to,from,next。

其中next有三个方法

(1)next(); //默认路由

(2)next(false); //阻止路由跳转

(3)next({path:’/’}); //阻止默认路由,跳转到指定路径

这里我使用了组件内钩子进行判断token过期后跳转到登录页,其他两种钩子可以去官网查看。

//路由前验证

beforeRouteEnter(to, f

公众号token失效,但是过期时间却没有过期,解决方案

01-20

公众号token失效,但是过期时间却没有过期,解决方案解决方案很多公众号开发的程序员们都碰到过,token的有效期明明没有过期,但是token却失效了,往往因为此错误遗漏很多信息,所以解决逻辑如下;

解决方案很多公众号开发的程序员们都碰到过,token的有效期明明没有过期,但是token却失效了,往往因为此错误遗漏很多信息,所以解决逻辑如下;

首先token是通过已经储存在数据库的access_token来获取(如果没有,那就要请求微信API来获取),之后通过token测试是否有效API,例如:

$access_token = (new CommonMoudle())->get_authori

请求时token过期自动刷新token操作

10-14

主要介绍了请求时token过期自动刷新token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Java自学day4

nanshenchao的博客

03-03

1439

数字进行运算时,数据类型不一样不能运算,需要一样的,才能运算。类型转换的分类:1.隐式转换(自动类型提升):取值范围小的数值转向取值范围大的数值2.强制转换:取值范围大的数值转向取值范围小的数值如果把一个取值范围大的数值,赋值给取值范围小的变量。是不允许直接赋值的。如果一定要这么做就需要加入强制转换格式:目标数据类型 变量名 = (目标数据类型)被强转的数据;

LeetCode hot100-4

alike_meng的博客

03-04

696

LeetCode热题100第4题

数组的访问2

程小白的博客

03-07

242

/ 数组的长度// 非空数组的最大索引 = array.length - 1。

Java的 Map以及实现一个简单的红黑树

最新发布

好看的皮囊千篇一律,有趣的灵魂万里挑一。

03-07

1196

Map是将键映射到值的对象。map**不能包含重复的键**; 每个键最多只能映射到一个值。这个接口取代了Dictionary类,Dictionary类是一个完全抽象的类,而不是接口。

Map接口提供了三个集合视图,它们允许将映射的内容视为一组键、一组值或一组键-值映射。映射的顺序定义为映射集合视图上的迭代器返回其元素的顺序。一些类似实现,比如TreeMap类,对它们的顺序做出了特定的保证;其他类,如HashMap类,则不需要。

注意:如果使用可变对象作为映射键,必须非常小心。如果对象的值以影响相等比较的

【Web】浅聊JDBC的SPI机制是怎么实现的——DriverManager

uuzeray的博客

03-06

1415

【Web】浅浅地聊JDBC java.sql.Driver的SPI后门-CSDN博客上篇文章我们做到了知其然,知道了JDBC有SPI机制,并且可以利用其Driver后门这篇文章希望可以做到知其所以然,对JDBC的SPI机制的来源做到心里有数。

js-cookie设置token过期时间_详解ASP.NET Core Web Api之JWT刷新Token_实用技巧

06-02

好的,针对您的问题,我可以给您一些关于js-cookie设置token过期时间以及ASP.NET Core Web API之JWT刷新Token的实用技巧。

首先,关于js-cookie设置token过期时间,可以通过以下代码实现:

```javascript

// 设置cookie过期时间为1天

Cookies.set('token', 'your_token_value', { expires: 1 });

```

其中,`expires`属性表示过期时间,单位为天。

其次,关于ASP.NET Core Web API之JWT刷新Token,可以采用以下方法:

在JWT的payload中加入`exp`属性,表示token的过期时间。当token过期后,客户端需要向服务器发送请求,获取新的token。服务器对于过期的token,可以返回一个特定的状态码,比如401 Unauthorized。客户端接收到该状态码后,可以重新向服务器发送请求,获取新的token。

同时,在服务器端需要实现一个刷新token的接口,接口的功能是根据旧的token生成新的token。具体实现可以参考以下代码:

```csharp

[HttpPost("refresh-token")]

public IActionResult RefreshToken([FromBody] string token)

{

// 验证旧的token是否有效

var principal = _jwtService.GetPrincipalFromExpiredToken(token);

if (principal == null)

return BadRequest("Invalid token");

// 生成新的token

var newToken = _jwtService.GenerateToken(principal.Claims);

return Ok(newToken);

}

```

其中,`_jwtService`表示JWT的服务类,`GetPrincipalFromExpiredToken`方法用于从过期的token中获取`ClaimsPrincipal`对象,`GenerateToken`方法用于生成新的token。

希望以上内容对您有所帮助。如有其他问题,请随时提问。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

CRMEB商城系统

CSDN认证博客专家

CSDN认证企业博客

码龄2年

西安众邦网络科技有限公司

377

原创

6万+

周排名

7096

总排名

52万+

访问

等级

5241

积分

727

粉丝

788

获赞

41

评论

1319

收藏

私信

关注

热门文章

企业微信接口错误代码大全

18757

微信支付的收款功能被限制了怎么办,收款受限制怎么解除?

18734

MySQL8超详细安装教程

14624

网站出现403 Forbidden错误的原因以及怎么解决的方法

14252

彻底搞懂ESLint与Prettier在vscode中的代码自动格式化

12159

最新评论

vue + vue-office 实现多种文件(docx、excel、pdf)的预览

一袭锦衣:

docx写本地地址,显示不出来文档

Access-Control-Allow-Origin跨域解决及详细介绍

noonsz:

Access-Control-Allow-Credentials 含义说的不正确模糊。它用于指定在跨源(CORS)请求中,是否允许浏览器发送凭证(credentials)。这些凭证包括cookies以及HTTP认证相关的信息。当此头部的值设置为 "true" 时,它允许前端在进行跨域请求时携带凭证信息。这意味着浏览器可以在跨域请求中包含cookies和HTTP认证信息。

在这种情况下,服务器可以接收并使用这些凭证,例如进行会话管理或者保持用户的登录状态。

由于包含凭证的跨域请求可能涉及敏感数据,因此使用Access-Control-Allow-Credentials: true需要谨慎。特别是,当这个头部为 "true" 时,Access-Control-Allow-Origin 不能设置为 "*",因为这会导致任意第三方网站都可能携带用户的凭证发起请求。而应该设置为确切的、可信的来源域名。

credentials 通常包括以下几种:

Cookies, HTTP Authentication,SSL/TLS Client Certificates

最后再解释说明一下 SSL/TLS Client Certificates 是一种基于证书的认证机制,用于在SSL/TLS层进行身份验证。客户端将其证书发送给服务器进行认证。

获取微信服务器IP地址

HrYy2662:

这个服务器地址能用来做什么呢?

vue + vue-office 实现多种文件(docx、excel、pdf)的预览

奥拓蛋/:

引入依赖会报错

关于小程序隐私保护指引设置的公告

CRMEB商城系统:

应该撤销不了

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

掌握Vue的20种写法,让开发效率翻倍!

企业如何利用微信创造持续增长的私域流量

Vue3自定义Hooks一键换肤教程

2024年37篇

2023年316篇

2022年38篇

目录

目录

最新文章

掌握Vue的20种写法,让开发效率翻倍!

企业如何利用微信创造持续增长的私域流量

Vue3自定义Hooks一键换肤教程

2024年37篇

2023年316篇

2022年38篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

打赏作者

CRMEB商城系统

你的鼓励将是我创作的最大动力

¥1

¥2

¥4

¥6

¥10

¥20

扫码支付:¥1

获取中

扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

token失效处理 - 知乎

token失效处理 - 知乎切换模式写文章登录/注册token失效处理大鱼海棠●第一种方案是:服务器端保存token状态,用户每次操作都会自动推迟token的过期时间,session就是采用这种策略保持token的有效期,但是当前后端分离,单页面的时候,每秒钟的请求发起多次,每次都去刷新一下过期时间会非常消耗性能的;●第二种方案:使用refresh token,避免频繁的刷新token,此时服务端只要在token过期的时候反馈给前端,前端使用refresh token申请一个全新的token继续使用即可在处理token失效的问题时,可以采取以下步骤:在token失效后,对于服务器的响应结果,一般情况下前端和后端会就code的值做一个约定,这里我们对于token超时导致的请求异常的code返回值约定为10002。在接收到服务器响应的第一时间判断code的值是否为10002。也就是在响应拦截器中进行code值的判断。如果code值为10002,则表示token失效。如果token失效,那么将页面跳转到登陆界面(login)并将本地cookies和Vuex中存储的失效token清除。这里的removeToken是外部导入的清除本地cookies里token的方法。清空失效的token后,根据我们在路由守卫中的判断设定,页面将自动跳转回登陆界面。发布于 2023-11-06 10:56・IP 属地广东token​赞同 1​​添加评论​分享​喜欢​收藏​申请

token系统讲解及过期处理 - byd张小伟 - 博客园

token系统讲解及过期处理 - byd张小伟 - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

byd张小伟

token系统讲解及过期处理

token系统讲解及过期处理:https://blog.csdn.net/qq_35942348/article/details/125971246

前端token知识梳理:token如何存储?token过期如何处理?如何无感刷新token?:https://blog.csdn.net/weixin_42960907/article/details/125503058?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125503058-blog-126461222.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125503058-blog-126461222.pc_relevant_default&utm_relevant_index=1

token系统讲解及过期处理1. token是什么?用来做什么2. token存储在哪?过期了怎么办?3. 请求拦截与响应拦截执行时机(面试重点)4. 解决token过期方案一: `重新登录`5. 方案二:使用 `refresh_token` 方案

这玩意很简单,记录一下吧,给入门的小白用下1. token是什么?用来做什么token通常译为令牌,暗号。举个例子:我是古时候皇城中大内的高手(看门的大爷),进皇宫需要皇帝发的特制令牌,没有指定的令牌是不能进的,我会把你拦住,说不定还会把你胖揍一顿。皇宫在这里就相当于我们项目,为了项目的安全性,设置了这个token,进项目的人都需要有这个玩意,证明你有这个权限。token是怎么生成的? 通过哈希算法(不常用)、uuid(雪花算法,可保持全球唯一性),jwt工具等生成随机字符串(也可能会拼接上用户的一些信息)为什么token要有有效期?而且设置得这么短? 为了提高token的安全性,不能永久有效,降低被别人劫持的风险有时候登录的时候为什么会有多个token?1. 常规 token:使用频繁,有效期比较短2. refresh_token:当token过期的时候,用来得到新的token的,使用不频繁,有效期比较长(一般为一个月)我们怎么知道token过期了? 通过调接口时返回的状态码,如果状态码是401(一般情况下),就说明没有携带token,或者token过期了

2. token存储在哪?过期了怎么办?token由服务端生成,通过接口传给前端。一般在登录接口会给token值。存储看具体的项目场景,一般存储在本地缓存里,有两种方案供君选择:sessionStorage(会话级别,网页一关就歇逼了)localStorage(永久的,需要手动去清除)token过期处理重新登录 => 清空token,跳转登录页refresh_token => 得到一个全新的token3. 请求拦截与响应拦截执行时机(面试重点)这玩意面试问的多,看图很清晰:

请求拦截器执行时机:axios调用之后,浏览器真正发起请求之前响应拦截器执行时机:浏览器接受到响应数据之后,axios拿到数据之前4. 解决token过期方案一: 重新登录知道出现了401的错误: 使用响应拦截器进行页面的跳转此种方案用户体验不是很好(目前大部分企业及项目都这么干)import store from '@/store'

// 响应拦截器request.interceptors.response.use( function (response) { // 响应成功(响应状态码是 2xx)时执行第一个回调函数 console.log('响应成功....') return response }, function (error) { // 网络异常或响应失败(响应状态码是非2开头)时执行第二个回调函数 console.log('响应失败....') // 1. 判断响应的状态码是不是401,如果不是401就不用做任何处理 if (error.response && error.response.status === 401) { // 2. 如果是401,就先清空token, 并跳转到登录页 store.commit('setUser', null) router.push('/login') } return Promise.reject(error) })12345678910111213141516171819205. 方案二:使用 refresh_token 方案判断有没有refresh_token,如果没有跳转登录页如果有refresh_token,调用刷新token的接口,拿到新的token更新vuex和loaclStoreage存储的token为原来调用接口方,重新去调用接口如果利用refresh_token,刷新token的接口失败,则还是跳转到登录页附上了详细的注释,讲道理大佬们应该看得懂import axios from 'axios'import store from '@/store'import router from '@/router'

const baseURL = 'http://xxx.xxx.net/'

const request = axios.create({ baseURL // 接口的基准路径})

// 请求拦截器// Add a request interceptorrequest.interceptors.request.use(function (config) { // 请求发起会经过这里 // config:本次请求的请求配置对象 const { user } = store.state if (user && user.token) { config.headers.Authorization = `Bearer ${user.token}` } // 注意:这里务必要返回 config 配置对象,否则请求就停在这里出不去了 return config}, function (error) { // 如果请求出错了(还没有发出去)会进入这里 return Promise.reject(error)})

request.interceptors.response.use( function (response) { // 响应成功(响应状态码是 2xx)时执行第一个回调函数 return response }, async function (error) { // 网络异常或响应失败(响应状态码是非2开头)时执行第二个回调函数 console.log('响应失败时执行的代码....') if (error.response && error.response.status === 401) { const user = store.state.user if (user && user.refresh_token) { // 1. 判断有没有refresh_token,如果没有跳转登录页 // 2. 如果有refresh_token,调用刷新token的接口,拿到新的token try { var res = await axios({ baseURL: baseURL, method: 'PUT', url: '/xxx/xxx', headers: { Authorization: `Bearer ${user.refresh_token}` } }) } catch { // 5. 如果refresh_token过期,进行清空token并跳转到登录页的处理 store.commit('setUser', null) router.push('/login') }

// 3. 更新vuex和loaclStoreage存储的token store.commit('setUser', { refresh_token: user.refresh_token, token: res.data.data.token }) // 4. 为原来调用接口方,重新去调用接口 console.log(error.config) return request(error.config) } else { // 1. 判断有没有refresh_token,如果没有跳转登录页 store.commit('setUser', null) router.push('/login') } }

// 3. 如果利用refresh_token,刷新token的接口失败,则还是跳转到登录页 // eslint-disable-next-line prefer-promise-reject-errors return Promise.reject(error) })

export default request————————————————版权声明:本文为CSDN博主「欧阳呀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_35942348/article/details/125971246

posted on

2022-12-02 16:50 

byd张小伟 

阅读(1567) 

评论(0) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

导航

博客园

首页

联系

订阅

管理

公告

Powered by:

博客园

Copyright © 2024 byd张小伟

Powered by .NET 8.0 on Kubernetes

token 过期后,如何自动续期?-腾讯云开发者社区-腾讯云

n 过期后,如何自动续期?-腾讯云开发者社区-腾讯云猿天地token 过期后,如何自动续期?关注作者腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具TVP最新优惠活动文章/答案/技术大牛搜索搜索关闭发布登录/注册首页学习活动专区工具TVP最新优惠活动返回腾讯云官网猿天地首页学习活动专区工具TVP最新优惠活动返回腾讯云官网社区首页 >专栏 >token 过期后,如何自动续期?token 过期后,如何自动续期?猿天地关注发布于 2022-05-09 12:48:024.4K0发布于 2022-05-09 12:48:02举报文章被收录于专栏:猿天地猿天地点击上方蓝色字体,选择“设为星标”

回复”学习资料“获取学习宝典JWT token的 payload 部分是一个json串,是要传递数据的一组声明,这些声明被JWT标准称为claims。JWT标准里面定义的标准claim包括:iss(Issuser):JWT的签发主体;sub(Subject):JWT的所有者;aud(Audience):JWT的接收对象;exp(Expiration time):JWT的过期时间;nbf(Not Before):JWT的生效开始时间;iat(Issued at):JWT的签发时间;jti(JWT ID):是JWT的唯一标识。除了以上标准声明以外,我们还可以自定义声明。以 com.auth0 为例,下面代码片段实现了生成一个带有过期时间的token.String token = JWT.create()

    .withIssuer(ISSUER)

    .withIssuedAt(new Date(currentTime))// 签发时间

    .withExpiresAt(new Date(currentTime + EXPIRES_IN * 1000 * 60))// 过期时间戳

    .withClaim("username", username)//自定义参数

    .sign(Algorithm.HMAC256(user.getPassword()));复制其中:withIssuer() 设置签发主体;withIssuedAt() 设置签发时间;withExpiresAt() 设置过期时间戳,过期的时长为 EXPIRES_IN (单位秒);withClaim() 设置自定义参数。JWT设置了过期时间以后,一定超过,那么接口就不能访问了,需要用户重新登录获取token。如果经常需要用户重新登录,显然这种体验不是太好,因此很多应用会采用token过期后自动续期的方案,只有特定条件下才会让用户重新登录。token过期的续期方案解决token过期的续期问题可以有很多种不同的方案,这里举一些比较有代表性的例子。首先我们看一个单token方案,这个方案除了可以实现token续期以外,还可以实现某些条件下的强制重新登录。单token方案将 token 过期时间设置为15分钟;前端发起请求,后端验证 token 是否过期;如果过期,前端发起刷新token请求,后端为前端返回一个新的token;前端用新的token发起请求,请求成功;如果要实现每隔72小时,必须重新登录,后端需要记录每次用户的登录时间;用户每次请求时,检查用户最后一次登录日期,如超过72小时,则拒绝刷新token的请求,请求失败,跳转到登录页面。另外后端还可以记录刷新token的次数,比如最多刷新50次,如果达到50次,则不再允许刷新,需要用户重新授权。上面介绍的单token方案原理比较简单。下面我们再看一个双token方案。双token方案登录成功以后,后端返回 access_token 和 refresh_token,客户端缓存此两种token;使用 access_token 请求接口资源,成功则调用成功;如果token超时,客户端携带 refresh_token 调用token刷新接口获取新的 access_token;后端接受刷新token的请求后,检查 refresh_token 是否过期。如果过期,拒绝刷新,客户端收到该状态后,跳转到登录页;如果未过期,生成新的 access_token 返回给客户端。客户端携带新的 access_token 重新调用上面的资源接口。客户端退出登录或修改密码后,注销旧的token,使 access_token 和 refresh_token 失效,同时清空客户端的 access_token 和 refresh_toke。微信网页授权是通过OAuth2.0机制实现的,也使用了双token方案。微信网页授权方案用户在第三方应用的网页上完成微信授权以后,第三方应用可以获得 code(授权码)。code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。第三方应用通过code获取网页授权凭证access_token和刷新凭证 refresh_token。access_token是调用授权关系接口的调用凭证,由于access_token有效期(2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新。refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。后端实现token过期还可以利用Redis来存储token,设置redis的键值对的过期时间。如果发现redis中不存在token的记录,说明token已经过期了。来源:toutiao.com/article/6995179162675790350-------------  END  -------------扫描下方二维码,加入技术群。暗号:加群复制本文参与 腾讯云自媒体分享计划,分享自微信公众号。原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除json编程算法微信本文分享自 猿天地 微信公众号,前往查看如有侵权,请联系 cloudcommunity@tencent.com 删除。本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!json编程算法微信评论登录后参与评论0 条评论热度最新登录 后参与评论推荐阅读LV.关注文章0获赞0目录token过期的续期方案相关产品与服务云数据库 Redis腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。产品介绍产品文档云数据库采购特惠,高性能、高可靠、高安全,超值优惠等你享!

领券社区专栏文章阅读清单互动问答技术沙龙技术视频团队主页腾讯云TI平台活动自媒体分享计划邀请作者入驻自荐上首页技术竞赛资源技术周刊社区标签开发者手册开发者实验室关于社区规范免责声明联系我们友情链接腾讯云开发者扫码关注腾讯云开发者领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL 数据库SSL 证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569腾讯云计算(北京)有限责任公司 京ICP证150476号 |  京ICP备11018762号 | 京公网安备号11010802020287问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档Copyright © 2013 - 2024 Tencent Cloud.All Rights Reserved. 腾讯云 版权所有登录 后参与评论00