怎么下载tp钱包|token过期是什么意思

作者: 怎么下载tp钱包
2024-03-08 21:32:07

token过期了怎么办? - 掘金

token过期了怎么办? - 掘金

首页 首页

沸点

课程

直播

活动

竞赛

商城

APP

插件 搜索历史

清空

创作者中心

写文章 发沸点 写笔记 写代码 草稿箱 创作灵感

查看更多

会员

登录

注册

token过期了怎么办?

JoyZ

2023-12-05

2

阅读6分钟

token过期了怎么办?一般做法是重复第一次获取token的过程(比如登录,扫描授权等) ,这样做的缺点是用户体验不好,每一小时强制登录一次几乎是无法忍受的。那应该怎么办呢?其实这是一个老生常谈的问题,但是最近发现很多人并不清楚,所以今天就一次讲清这个问题!

token 过期处理

没有绝对的安全, 所谓的安全处理, 就是提高攻击者攻击的难度, 对他造成了一定的麻烦, 我们这个网站就是安全的! 网站安全性就是高的! 所以: token 必须要有过期时间!

token 过期问题

目标: 了解token过期问题的存在, 学习token过期的解决思路

现象:

你登陆成功之后,接口会返回一个token值,这个值在后续请求时带上(就像是开门钥匙)。

但是,这个值一般会有有效期(具体是多长,是由后端决定),在我们的项目中,这个有效期是2小时。

如果,上午8点登陆成功,到了10:01分,则token就会失效,再去发请求时,就会报401错误。

思考:

token需要过期时间吗 ?

token即是获取受保护资源的凭证,当然必须有过期时间。否则一次登录便可永久使用,认证功能就失去了其意义。非但必须有个过期时间,而且过期时间还不能太长,

参考各个主流网站的token过期时间,一般1小时左右

token一旦过期, 一定要处理, 不处理, 用户没法进行一些需要授权页面的使用了

token过期该怎么办?

token过期,就要重新获取。

那么重新获取有两种方式,一是重复第一次获取token的过程(比如登录,扫描授权等) ,这样做的缺点是用户体验不好,每一小时强制登录一次几乎是无法忍受的。

那么还剩第二种方法,那就是主动去刷新token. 主动刷新token的凭证是refresh token,也是加密字符串,并且和token是相关联的。相比可以获取各种资源的token,refresh token的作用仅仅是获取新的token,因此其作用和安全性要求都大为降低,所以其过期时间也可以设置得长一些。

目标效果 - 保证每一小时, 都是一个不同的token

第一次请求 9:00 用的是 token1 ​ 第二次请求 12:00 用的是 token2

当用户登陆成功之后,返回的token中有两个值,说明如下:

token:

作用:在访问一些接口时,需要传入token,就是它。

有效期:2小时。

refresh_token

作用: 当token的有效期过了之后,可以使用它去请求一个特殊接口(这个接口也是后端指定的,明确需要传入refresh_token),并返回一个新的token回来(有效期还是2小时),以替换过期的那个token。

有效期:14天。(最理想的情况下,一次登陆可以持续14天。)

对于 某次请求A 的响应,如果是401错误

有refresh_token,用refresh_token去请求回新的token

新token请求成功

更新本地token

再发一次请求A

新token请求失败

清空vuex中的token

携带请求地址,跳转到登陆页

没有refresh_token

清空vuex中的token

携带请求地址,跳转到登陆页

对于一个请求的响应 401, 要这么处理, 对于十个请求的响应 401, 也要这么处理,

我们可以统一将这个token过期处理放在响应拦截器中

请求拦截器: 所有的请求, 在真正被发送出去之前, 都会先经过请求拦截器 (可以携带token)

响应拦截器: 所有的响应, 在真正被(.then.catch await)处理之前, 都会先经过响应拦截器, 可以在这个响应拦截器中统一对响应做判断

响应拦截器处理token

目标: 通过 axios 响应拦截器来处理 token 过期的问题

响应拦截器: www.kancloud.cn/yunye/axios…

没有 refresh_token 拦截到登录页, 清除无效的token

测试: {"token":"123.123.123"}

// 添加响应拦截器

http.interceptors.response.use(function (response) {

// 对响应数据做点什么 (成功响应) response 就是成功的响应 res

return response

}, function (error) {

// 对响应错误做点什么 (失败响应) 处理401错误

// console.dir(error)

if (error.response.status === 401) {

console.log('token过期了, 一小时过去了, 需要通过refresh_token去刷新token')

// 获取 refresh_token, 判断是否存在, 存在就去刷新token

const refreshToken = store.state.tokenInfo.refresh_token

if (refreshToken) {

console.log('存在refreshToken, 需要进行刷新token操作')

} else {

// 没有refreshToken, 直接去登录, 将来还能跳回来

// router.currentRoute 指向当前路由信息对象 === 等价于之前页面中用的 this.$route

// 清除本地token, 跳转登录 (无意义的本地token内容, 要清除)

store.commit('removeToken')

router.push({

path: '/login',

query: {

backto: router.currentRoute.fullPath

}

})

}

}

return Promise.reject(error)

})

提供清除token的mutation

// 移出tokenInfo的信息, 恢复成空对象

removeToken (state) {

state.tokenInfo = {}

// 更新到本地, 本地可以清掉token信息

removeToken()

},

有 refresh_token 发送请求, 刷新token

测试操作: 将 token 修改成 xyz, 模拟 token 过期, 而有 refresh_token 发现401, 会自动帮你刷新token

{"refresh_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MDYzNTcyODcsInVzZXJfaWQiOjExMDI0OTA1MjI4Mjk3MTc1MDQsInJlZnJlc2giOnRydWV9.2A81gpjxP_wWOjclv0fzSh1wzNm6lNy0iXM5G5l7TQ4","token":"xyz"}

const refreshToken = store.state.tokenInfo.refresh_token

if (refreshToken) {

console.log('存在refreshToken, 需要进行刷新token操作')

// (1) 发送请求, 进行刷新token操作, 获取新的token

// 注意: 这边发请求, 不用http实例, 用它会自动在请求前帮你携带token(会覆盖你的refresh_token)

// 这边, 直接用 axios 发送请求

const res = await axios({

method: 'put',

url: 'http://ttapi.research.itcast.cn/app/v1_0/authorizations',

// 请求头中携带refresh_token信息

headers: {

Authorization: `Bearer ${refreshToken}`

}

})

const newToken = res.data.data.token

// (2) 将新token更新到vuex中

store.commit('setTokenInfo', {

refresh_token: refreshToken,

token: newToken

})

}

刷新token后, 应该重新发送刚才的请求 (让用户刷新token无感知)

return http(error.config)

那万一 refresh_token 也过期了, 是真正的用户登录过期了 (一定要让用户重新登录的)

测试: {"refresh_token":"123.123","token":"123.123.123"} 修改后, 修改的是本地, 记得刷新一下

从哪拦走的, 就回到哪去

// 添加响应拦截器

http.interceptors.response.use(function (response) {

// 对响应数据做点什么 (成功响应) response 就是成功的响应 res

return response

}, async function (error) {

// 对响应错误做点什么 (失败响应) 处理401错误

// console.dir(error)

if (error.response.status === 401) {

console.log('token过期了, 一小时过去了, 需要通过refresh_token去刷新token')

// 获取 refresh_token, 判断是否存在, 存在就去刷新token

const refreshToken = store.state.tokenInfo.refresh_token

if (refreshToken) {

try {

console.log('存在refreshToken, 需要进行刷新token操作')

// (1) 发送请求, 进行刷新token操作, 获取新的token

// 注意: 这边发请求, 不用http实例, 用它会自动在请求前帮你携带token(会覆盖你的refresh_token)

// 这边, 直接用 axios 发送请求

const res = await axios({

method: 'put',

url: 'http://ttapi.research.itcast.cn/app/v1_0/authorizations',

// 请求头中携带refresh_token信息

headers: {

Authorization: `Bearer ${refreshToken}`

}

})

const newToken = res.data.data.token

// (2) 将新token更新到vuex中

store.commit('setTokenInfo', {

refresh_token: refreshToken,

token: newToken

})

// (3) 重新发送刚才的请求, http, 自动携带token (携带的是新token)

// error.config就是之前用于请求的配置对象, 可以直接给http使用

return http(error.config)

} catch {

// refresh_token 过期了, 跳转到登录页

// 清除过期的token对象

store.commit('removeToken')

// 跳转到登录页, 跳转完, 将来跳回来

router.push({

path: '/login',

query: {

backto: router.currentRoute.fullPath

}

})

}

} else {

// 没有refreshToken, 直接去登录, 将来还能跳回来

// router.currentRoute 指向当前路由信息对象 === 等价于之前页面中用的 this.$route

// 清除本地token, 跳转登录 (无意义的本地token内容, 要清除)

store.commit('removeToken')

router.push({

path: '/login',

query: {

backto: router.currentRoute.fullPath

}

})

}

}

return Promise.reject(error)

})

注意点:

响应拦截器要加在axios实例 http 上。

用refresh_token请求新token时,要用axios,不要用实例 http (需要: 手动用 refresh_token 请求)

得到新token之后,再发请求时,要用 http 实例 (用token请求)

过期的 token 可以用 refresh_token 再次更新获取新token, 但是过期的 refresh_token 就应该从清除了

JoyZ

前端工程师 @ebest, 思岚科技, 百安居

43

文章

41k

阅读

53

粉丝 目录 收起

token 过期处理

token 过期问题

响应拦截器处理token

友情链接:

jsp 设置图片属性

linux获取当前时间函数

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

>

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

token的原理及过期处理

最新推荐文章于 2024-03-04 22:46:48 发布

前端扫地僧

最新推荐文章于 2024-03-04 22:46:48 发布

阅读量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 容器中获取方便响应式为了持久化,还需

复制链接

扫一扫

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

10-14

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

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

08-28

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

1 条评论

您还未登录,请先

登录

后发表或查看评论

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

孤er尽悲欢绝的博客

01-12

474

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

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

飘渺Jam的博客

07-16

7438

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

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

baidu_39009276的博客

12-08

7336

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

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

m0_55918015的博客

05-18

3126

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

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

2.用户如果一段时间,

token响应式设置

adlixiaxia的博客

12-02

609

处理用户 Token

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

访问需要授权的 API 接口

校验页面的访问权限

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

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

往哪儿存?

本地存储

获取麻烦

数据不是响应式

Vuex 容器(推荐)

获取方便

响应式的

登录成功,将 Token 存储到 Vuex 容器中

获取方便

响应式

token过期机制的问题

qq_46940224的博客

10-15

3718

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

如何对登录token有效期控制,前端控制和后端控制

LOxia的博客

08-04

4825

如何对登录token有效期控制,前端控制和后端控制

Java编程——Token 认证的来龙去脉

weixin_33672109的博客

07-19

246

通常情况下,我们在讨论某个技术的时候,都是从问题开始。那么第一个问题:

为什么要用 Token?

而要回答这个问题很简单——因为它能解决问题!

可以解决哪些问题呢?

1. Token 完全由应用管理,所以它可以避开同源策略

2. Token 可以避免CSRF 攻击

3....

Token实现登录、token过期解决以及数据解析

qq_38935605的博客

10-21

7189

token我们可以理解为一个令牌,主要的作用是守护我们系统的安全,像我们登录这些都是可以使用token进行用户数据校验的,那么为什么不用传统的session呢?可能很多人直接使用上面的代码进行登录接口实现了,那么同志们有想过一个问题吗?上面设置了token的过期时间的,当用户正在使用我们软件的时候,突然token过期了直接报了个401,这个时候用户肯定是一脸懵逼了,有很多软件都会出现这个问题,就是因为偷懒了,我们不经常发现是因为他们的token设置的过期时间较长而已。--导入下面依赖吧-->

localStorage 设置过期时间的方法实现

12-13

localStorage除非人为手动清除,否则会一直存放在浏览器中,但是很多情况下我们可能需要localStorage有一个过期时间,比如我们将用户身份认证 token 保存在客户端,1周之内有效,超过一周则要重新登录,那么这种需求该怎么实现呢

要知道,localStorage本身并没有提供过期机制,既然如此,那就只能我们自己来实现了,我们可以直接给其原型上加上这样一个方法

Storage.prototype.setExpire=(key,value,expire) =>{

};

Storage.setExpire(key,value,expire);

要过期就必须要记录时间,我们的思路是

access_token验证过期类

11-29

access_token验证过期类,验证过期的处理办法,超过一小时则从新获取。

Jmeter设置全局变量token过程图解

09-07

主要介绍了Jmeter设置全局变量token过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

08-26

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

vue的token刷新处理的方法

10-18

主要介绍了vue的token刷新处理的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

02-Vue 计算属性与监听器与VUE-cli使用

weixin_65251013的博客

03-02

651

Vue中的watch默认不监测对象内部值的改变(一层)在watch中配置deep:true可以监测对象内部值的改变(多层)Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以使用watch时根据监视数据的具体结构,决定是否采用深度监视computed能完成的功能,watch都可以完成watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作所有被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。

vue2 element 实现表格点击详情,返回时保留查询参数

听见涛声

03-03

456

一开始准备用vuex做这个功能,后来放弃了,想到直接用路由去做可能也不错。有时间再整一套vuex版的。列表共5条数据,准备输入Author过滤条件进行查询。进入查看详情页,就随便搞了个按钮 啥都没调啦。

Vue.js 修饰符:精准控制组件行为

最新发布

你若盛开,清风自来

03-04

1046

本文将带你深入了解 Vue.js 中的修饰符,学会如何使用修饰符来精确控制组件的行为。通过 MD 语法和多级标题结构,为你呈现一部适合 CSDN 发布的技术博客。修饰符是 Vue.js 提供的一种特殊属性,用于修改组件的默认行为。它们通常用于事件监听器和属性绑定上,可以让我们更精确地控制组件的行为。Vue 修饰符是 Vue.js 中的一个核心功能,允许你在 Vue 模板中使用自定义的 HTML 属性来扩展元素的功能。修饰符通常用于对事件处理程序或表达式进行额外的操作。

token + redis 过期更新

09-06

在Redis中,使用token来管理过期时间是一种常见的做法。当客户端请求服务时,服务器会生成一个唯一的token,并将其存储在Redis中作为key,同时存储一些与token相关的信息,如用户ID、过期时间等作为value。通过设置过期时间,可以有效地控制token的生命周期并提升系统的安全性和性能。

当一个token过期时,服务器会检查其是否存在于Redis中。如果存在,则说明该token还在有效期内,服务器可以继续验证请求,并更新token的过期时间,延长其有效期。这样做的好处是避免了频繁地向数据库查询token信息,降低了系统的负载压力和响应时间。

在进行过期更新时,可以使用Redis提供的expire命令来设置新的过期时间。通过expire命令,我们可以指定一个新的过期时间(以秒为单位),当时间达到时,Redis会自动将该key删除。同时,我们还可以使用set命令更新token的value,以便存储一些新的信息或者刷新其过期时间。

另外,为了保证系统的性能和避免出现脏数据,可以采取定期清理过期token的策略。通过定期的清理工作,我们可以及时地清除过期的token,释放相关的存储空间,提高系统的可用性和性能。

综上所述,通过使用token来管理过期时间,并在过期时及时地更新它们,可以有效地提升系统的安全性和性能。而Redis提供的expire和set命令可以方便地实现过期更新的功能。定期清理过期token则是保证系统健康运行的重要步骤。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

前端扫地僧

CSDN认证博客专家

CSDN认证企业博客

码龄4年

暂无认证

72

原创

39万+

周排名

56万+

总排名

7万+

访问

等级

756

积分

18

粉丝

31

获赞

5

评论

122

收藏

私信

关注

热门文章

token的原理及过期处理

17122

cookie、session、token的区别

6054

ajax提交数据中formdata的使用

5395

JavaScript中for 循环和foreach的区别

3414

token的理解与使用

3371

最新评论

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的及时刷新? - 知乎

对于token的认证,如何保证token的及时刷新? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册Web 开发JSON Web Token(JWT)token对于token的认证,如何保证token的及时刷新?1,在拦截器里对将要过期的token 的进行刷新。(一个页面可能n个请求同时发出,也就是说 refresh_token 要支持多个,这个不算最好的解决…显示全部 ​关注者26被浏览87,992关注问题​写回答​邀请回答​好问题​添加评论​分享​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及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码。图:来源于网络拿实际过程举例,当你下载QQ或微信后第一次用账号和密码成功登录后,Token就为我们免去了每次打开应用都要输入账号跟密码的过程。为什么要使用Token?为什么要使用Token?这个问题其实很好回答——因为它能解决问题!当下用户对产品的使用体验要求在逐渐提高,从产品体验方面来讲,Token带来的体验更容易能让用户接受。那么Token都可以解决哪些问题呢?Token具有随机性、不可预测性、时效性、无状态、跨域等特点。 Token完全由应用管理,所以它可以避开同源策略Token可以避免CSRF攻击Token可以是无状态的,可以在多个服务间共享Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。当然说到这里大家可能会想到,用服务器的session_id存储到cookies中也能做到,为什么非要用Token呢?网上有许多对比Token和session的文章,在此就不再赘述。其实小编觉得,如果是开发web应用的话,用两者都可以,但如果是开发API接口,前后端分离,最好使用Token,因为session+cookies是基于web的,但针对API接口可能会考虑到移动端,app是没有cookies和session的。Token的生命周期1)用户未登录用户执行注册/登录→一旦基础数据校验成功,后端生成Token,并且Token包含此次注册/登录用户的用户名并通过JsonResponse返回给前端→前端拿到返回的Token后,存入浏览器本地存储2)用户每次访问博客页面从本地存储中拿出Token→JS将Token 放入request的Authorization头,发送http请求向后端索要数据→服务器接到前端请求(当前URL加了loging_check,并且请求方法在methods参数中),进行校验→从requestAuthorization头拿出Token→校验→校验不通过,返回前端异常代码/校验通过,正常执行对应的视图函数→前端一旦接到关于Token的异常码,则删除本地存储中的Token,且将用户转至登录界面。如何设置Token的有效期?其实Token作为一个概念模型,开发者完全可以针对自己开发的应用自定义Token,只要能做到不让不法分子钻系统漏洞即可。那么为Token设置有效期还有必要吗?对于这个问题,大家不妨先看两个例子:例1:登录密码登录密码一般要求定期改变密码,以防止泄漏,所以密码是有有效期的。例2:安全证书SSL安全证书都有有效期,目的是为了解决吊销的问题。所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token都需要设有效期。那么,Token的有效期多长合适呢?一般来说,基于系统安全的需要当然需要尽可能的短,但也不能短得离谱:如果在用户正常操作的过程中,Token过期失效要求重新登录,用户体验岂不是很糟糕?为了解决在操作过程不让用户感到Token失效的问题,有一种方案是在服务器端保存Token状态,用户每次操作都会自动刷新(推迟)Token的过期时间。如此操作会存在一个问题,即在前后端分离、单页App等情况下,每秒可能发起多次请求,如果每次都去刷新过期时间会产生非常大的代价,同样地,如果Token的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率、减少消耗,会把Token的过期时保存在缓存或者内存中。另一种方案是使用RefreshToken,它可以避免频繁的读写操作。这种方案中,服务端无需刷新Token的过期时间,一旦Token过期,就反馈给前端,前端使用RefreshToken申请一个全新Token继续使用。这种方案中,服务端只需要在客户端请求更新Token的时候对RefreshToken的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然RefreshToken也是有有效期的,但是这个有效期就可以长一点了。使用 Token 和 Refresh Token 的时序图如下:1)登录 图:来源于网络2)业务请求 图:来源于网络3)Token 过期,刷新 Token 图:来源于网络参考文献:发布于 2021-01-14 10:19tokenWeb 应用HTTP​赞同 91​​7 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录人工智能大数据学

JwtToken使用-重点看一下过期时间_jwt的token默认失效时间-CSDN博客

>

JwtToken使用-重点看一下过期时间_jwt的token默认失效时间-CSDN博客

JwtToken使用-重点看一下过期时间

最新推荐文章于 2023-12-17 10:22:02 发布

香草天空Sky

最新推荐文章于 2023-12-17 10:22:02 发布

阅读量4.6w

收藏

21

点赞数

3

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

本文链接:https://blog.csdn.net/qsx741olm/article/details/93135141

版权

最近在做一个app,登录验证是用的jwt的token验证,今天来记录一下......

我的本次实例操作主要参考了下面资料

https://jwt.io/introduction/

https://blog.csdn.net/jikeehuang/article/details/51488020

https://www.cnblogs.com/ganchuanpu/archive/2017/05/17/6870240.html

https://www.cnblogs.com/xiekeli/p/5607107.html

https://blog.csdn.net/superdog007/article/details/80704234

下面是具体步骤:

1.添加jar包

然后是jwt token的具体实现

三个常量分别是

  保存在服务端的密钥,

  jwt令牌的有效时间

    刷新令牌的有效时间

jwt内置了许多加密编码,我这里采用Hs256加密,将自己设定的特有密码进行base编码,生成一个key

这一段是生成一个usertoken,

jwt token包含三部分 分别是header,payload(载荷),sign(签名)

header用来设置自己token的类型和使用的编码,payload存放用户的安全信息,因为jwt提供的编码是可逆的,所以不要存放用户的关键信息

sign是token的一个签名,由headr,payload以及key决定,当客户端发来一个key的时候,只要校验签名是否正确即可

 

这一段代码和上一张图在同一个方法内,主要用于实现令牌的刷新,本来刷新时间应该存放在redis里,但是我条件有限,只能先存放在数据库中

 

token的校验从传来的token中获得载荷payload,重新生成一个token,拿到新token的签名sign,将新的sign和旧sign比较,当两个sign一致时则通过验证

这一段代码和上一段在同一个方法内,当连个sign不一致时说明客户端token被篡改,直接返回一个null,在拦截器中做判断当为null时直接回到登陆界面

当t oken过期 ExpiredJwtException e 会自动捕获,我们在捕获到这个异常时,进行令牌的刷新,然后返回这个新的令牌

两个sign一致就直接返回原先的token。

令牌的刷新将之前存放在数据中刷新有效时间取出,与当前时间进行比较,如果小于当前的刷新有效时间则刷新令牌,然后更新数据库,返回新的token字符串,

如果该用户连已经长时间未使用app,导致当前时间已经超过了令牌刷新的时间,则删除数据库中的对应数据,token返回null;

客户端的token是放在request的header中发到后台的,所以需要从heaer中取出

 

 拿到的token是这样子的,所以需要对这个字符串按照空格截取,拿到真正有用的token

我们拿到校验返回过来的字符串,当这个字符串为空时,客户端返回到登陆界面

当两个token不相等时,说明校验传回来的token是新的,那么我们修改响应头中token为新的token,然后程序继续执行

........

第一次使用jwt,对jwt安全性还很不了解......只能先这样了

优惠劵

香草天空Sky

关注

关注

3

点赞

21

收藏

觉得还不错?

一键收藏

知道了

17

评论

JwtToken使用-重点看一下过期时间

最近在做一个app,登录验证是用的jwt的token验证,今天来记录一下......我的本次实例操作主要参考了下面资料https://jwt.io/introduction/https://blog.csdn.net/jikeehuang/article/details/51488020https://www.cnblogs.com/ganchuanpu/archive/2017/...

复制链接

扫一扫

java jwt刷新_jwt刷新token

weixin_32562455的博客

02-27

2865

前一段时间讲过了springboot+jwt的整合,但是因为一些原因(个人比较懒)并没有更新关于token的刷新问题,今天跟别人闲聊,聊到了关于业务中token的刷新方式,所以在这里我把我知道的一些点记录一下,也希望能帮到一些有需要的朋友,同时也希望给我一些建议,话不多说,上代码!1:这种方式为在线刷新,比方说设定的token有效期为30min,那么每次访问资源时,都会在拦截器中去判断一下toke...

jwt-token-verifier:验证JWT令牌OpenID提供程序

03-25

jwt-token-verifier 验证JWT令牌OpenID提供程序

17 条评论

您还未登录,请先

登录

后发表或查看评论

jwt token实例操作

weixin_30767835的博客

08-31

1620

最近在做一个app,登录验证是用的jwt的token验证,今天来记录一下......

我的本次实例操作主要参考了下面资料

https://jwt.io/introduction/

https://blog.csdn.net/jikeehuang/article/details/51488020

https://www.cnblogs.com/ganchuanpu/archive/2017/...

django_rest_framework_simplejwt如何更改token的默认过期时间

hk2872983273的博客

11-02

198

jwt的token过期时间是在settings.py中设置的,可是却不是django项目的settings.py中设置的,django项目的settings.py不会覆盖jwt的settings,因此我们需要在jwt模块中的settings.py更改过期时间

SpringBoot3+Jwt+Redis的Token有效性检查以及自动续期的实现

fatfish517的博客

12-17

332

1. 续期在后端完成,只给前端传递一个token,不采用两个token的方式,从而不增加前端工作量

2. 默认情况下解析Jwt token 时过期的token将抛出过期错误,因为需要自动续期,因此应忽略该错误。

3. token等信息保存在Redis中,并设置过期时间为token的过期时间。过期后保存信息自动删除 。修改此处过期时间实现延期

4. 记录每次前端请求的时间至Redis中。

5. 验证token有效性时,若距离最近一次请求的时差未超过定义的过期时间增量,则尝试进行续期操作

jwt_token的有效时间和刷新时间

wo240的专栏

04-18

7956

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

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

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

用之前即将过期的 t..

jwt的token如何刷新?

小青龙,创造,变强

02-27

4016

jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?jwt的token如何刷新?

token系统讲解及过期处理

欧阳的技术博客

07-25

1万+

token详细讲解,是什么,用来做什么?如何解决token过期的问题?最好的方案分享

JWT 使用入门(二)token有效期

qq_37534947的博客

10-12

1859

生成token,设置有效时间1分钟,其中密钥设置为"itcast"注意签发时间需要小于过期时间。

API接口之JWT设置token过期时间(二)

热门推荐

尼古拉斯大树的博客

10-11

5万+

目录

1.什么是Jwt

2.token是什么

3.为什么要使用token

4.如何实现token

5.JWT的简单案例

6.API接口token案例

6.1 token的创建

6.2 用户验证流程

7.测试流程

7.1 项目地址

7.2 表结构

1.什么是Jwt

Jwt是JSON Web Tokens的简称,从单词可以看出它也是一种token,其实可以理解为一种生成tok...

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

JWT - 生成token并配置过期时间

只会CV也没关系的

11-06

612

话说项目配置了Token,

就像是炒菜加味精。

一滴加进去,鲜味倍增,

保证安全又好吃。

thinkphp框架使用JWTtoken的方法详解

01-03

本文实例讲述了thinkphp框架使用JWTtoken的方法。分享给大家供大家参考,具体如下: 简介 一:JWT介绍:全称JSON Web Token,基于JSON的开放标准((RFC 7519) ,以token的方式代替传统的Cookie-Session模式,用于各...

shrio-with-jwt-spring-boot-starter:spring-boot环境下基于JWT Token的无状态shiro权限验证框架

05-14

Apache Shiro 功能非常强大,使用广泛,几乎成为了权限管理的代名词。但对于普通项目来说,Shiro 的设计理念因为追求灵活性,一些概念如 Realm,Subject 的抽象级别都比较高,显得比较复杂。如果没有对框架细节进行...

详解JWT token心得与使用实例

01-21

由上可知,该token使用HS256加密算法,将头部使用Base64编码可得到如下个格式的字符串: eyJhbGciOiJIUzI1NiJ9 有效载荷(Playload): { “iss”: “Online JWT Builder”, “iat”: 1416797419,

ASP.NET图书馆管理信息系统(源代码+论文).zip

03-07

ASP.NET图书馆管理信息系统(源代码+论文).zip

特种设备检验检测管理系统专业版》是专门为设备检验检测的数据管理而开发的一款软件.zip

最新发布

03-07

人工智能-项目实践-信息管理系统

基于Springboot的学生宿舍管理系统.zip

03-07

系统可以提供信息显示和相应服务,其管理员管理宿管员,管理学生,修改密码,维护个人信息。宿管员管理公寓资产,缴费信息,公共场所清理信息,日常事务信息,审核学生床位安排信息。学生查看公共场所清理信息,日常事务,缴费信息,在线申请床位,查看床位安排

.net JWT token 的过期时间不正确

07-20

对于 .NET 中的 JWT token,确保过期时间正确设置需要注意以下几点:

1. 确保使用的 JWT 库是最新版本。在 .NET 中,常用的 JWT 库包括 System.IdentityModel.Tokens.Jwt 和 Microsoft.IdentityModel.Tokens。确保你使用的是最新版本的库,以获得最佳的功能和修复了可能存在的问题。

2. 仔细检查过期时间的设置。在生成 JWT token 时,确保过期时间(expiration time)是正确设置的,并且与你的需求相符。一般来说,过期时间应该是一个未来的时间点,例如 `DateTime.UtcNow.AddMinutes(1)` 表示过期时间为当前时间加上 1 分钟。

3. 验证过期时间。在验证 JWT token 时,确保你正确地获取到了 token 中的过期时间,并与当前时间进行比较。使用 `DateTime.UtcNow` 获取当前时间,并与 token 的过期时间进行比较,判断是否已经过期。

```csharp

var tokenHandler = new JwtSecurityTokenHandler();

var jwtToken = tokenHandler.ReadJwtToken(jwtTokenString);

var expirationTime = jwtToken.ValidTo; // 获取过期时间

if (expirationTime < DateTime.UtcNow)

{

// token 已过期,处理相关逻辑

}

```

4. 检查时区设置。在处理过期时间时,确保你使用的是正确的时区设置。在 .NET 中,默认使用的是 UTC 时间,因此在比较过期时间时,也要使用 UTC 时间。

如果你仍然遇到过期时间不正确的问题,请提供更多相关的代码和上下文信息,以便我们能够更好地帮助你解决问题。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

香草天空Sky

CSDN认证博客专家

CSDN认证企业博客

码龄9年

暂无认证

153

原创

3万+

周排名

216万+

总排名

59万+

访问

等级

5793

积分

64

粉丝

296

获赞

118

评论

580

收藏

私信

关注

热门文章

ORA-12541: TNS: 无监听程序 的解决办法

74985

JwtToken使用-重点看一下过期时间

46193

Centos7查看IP地址方法

41009

xxx.dll没有被指定在windows上运行的解决方法

26743

mysql8.0 JSON_CONTAINS使用方法

24941

分类专栏

Maven

2篇

Java面试题

55篇

Java笔试题

1篇

SpringBoot官方教程

26篇

SpringCloud官方教程

14篇

SpringBoot脚手架

2篇

mysql

6篇

docker

1篇

Linux

14篇

Redis

1篇

MongoDB

1篇

数据仓库ETL

7篇

vue官方文档

5篇

Axure原型图

1篇

未分类

最新评论

ORA-12541: TNS: 无监听程序 的解决办法

小星Goon:

解决了强啊

ORA-12541: TNS: 无监听程序 的解决办法

kulmao:

太感谢博主了,就是文件超过4G了,删除重启立马恢复正常了,这是数据库的一个BUG啊

Xshell6和Xftp6 破解免安装版,无窗口多开限制

营赢盈英:

运行时提示失败 检索信息失败

ORA-12541: TNS: 无监听程序 的解决办法

@2206:

按照步骤一步一步来成了,感谢分享。

springboot前端传参date类型后台处理方式

Wang liwu:

可是数据库用mysql的话可以这样 sql server会报错 接收不到date型数据 这咋办

最新文章

win10快捷方式变成空白图标怎么办?

ORA-12541: TNS: 无监听程序 的解决办法

解决js动态改变dom元素属性后页面及时渲染问题

2021年2篇

2020年12篇

2019年235篇

2018年7篇

目录

目录

分类专栏

Maven

2篇

Java面试题

55篇

Java笔试题

1篇

SpringBoot官方教程

26篇

SpringCloud官方教程

14篇

SpringBoot脚手架

2篇

mysql

6篇

docker

1篇

Linux

14篇

Redis

1篇

MongoDB

1篇

数据仓库ETL

7篇

vue官方文档

5篇

Axure原型图

1篇

未分类

目录

评论 17

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

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

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值