怎么下载tp钱包|token过期是什么意思
怎么下载tp钱包|token过期是什么意思
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赞同 167 条评论分享收藏喜欢收起编程乐趣 关注这是我之前分享在星球里面的课程,下面整理下,分享下这个无感刷新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赞同 11 条评论分享收藏喜欢收起
用户身份验证的令牌——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赞同 917 条评论分享喜欢收藏申请转载文章被以下专栏收录人工智能大数据学
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、付费专栏及课程。
余额充值