会话token的最大有效期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了会话token的最大有效期相关的知识,希望对你有一定的参考价值。

会话token的最大有效期是8小时。

出于安全考虑,token的有效期一般是1-8小时,一般是2小时,那设想这样两个场景:

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

2.用户如果一段时间,比如说半个小时,在我们的系统上没有进行任何操作,这个时候,我们应该检测到这个情况,并且让用户重新回到登录页登录。
参考技术A 会话token的最大有效期是指会话token在失效之前可以有效使用的最长时间。一般来说,会话token的最大有效期由应用程序设定,一般情况下,会话token的最大有效期可以设定为几小时或几天,具体取决于应用程序的安全策略。会话token的最大有效期越长,应用程序的安全性就越低,因为会话token可以被恶意用户长时间使用,从而导致安全漏洞的产生。因此,为了确保应用程序的安全性,会话token的最大有效期应该尽可能短,以便及时发现和修复安全漏洞。 参考技术B 一般情况下,会话token的最大有效期可以根据不同的应用场景来定义,也可以根据不同的业务需求来调整。一般情况下,可以设置最大有效期为1小时左右,也可以根据应用的安全级别和使用模式调整有效期。最大有效期可以设置为几小时、几天、几周或者几个月,这取决于应用的安全要求、业务需求以及用户使用习惯等因素。 参考技术C 打开APP

结果才重要
关注
token有效期问题 原创
2022-09-30 22:24:20

结果才重要
码龄2年
关注
使用token:

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的

1.前端使用用户名跟密码请求首次登录

2.后服务端收到请求,去验证用户名与密码是否正确

3.验证成功后,服务端会根据用户id、用户名、定义好的秘钥、过期时间生成一个 Token,再把这个 Token 发送给前端

4.前端收到 返回的Token ,把它存储起来,比如放在 Cookie 里或者 Local Storage 里

5.前端每次路由跳转,判断 localStroage 有无 token ,没有则跳转到登录页。有则请求获取用户信息,改变登录状态;

6.前端每次向服务端请求资源的时候需要在请求头里携带服务端签发的Token

7.服务端收到请求,然后去验证前端请求里面带着的 Token。没有或者 token 过期,返回401。如果验证成功,就向前端返回请求的数据。

8.前端得到 401 状态码,重定向到登录页面。
 

需要设置有效期吗?

对于这个问题,我们不妨先看两个例子。一个例子是登录密码,一般要求定期改变密码,以防止泄漏,所以密码是有有效期的;另一个例子是安全证书。SSL 安全证书都有有效期,目的是为了解决吊销的问题,对于这个问题的详细情况,来看看知乎的回答(http://dwz.cn/7joMhq)。所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token 都需要设有效期。

那么有效期多长合适呢?

只能说,根据系统的安全需要,尽可能的短,但也不能短得离谱——想像一下手机的自动熄屏时间,如果设置为 10 秒钟无操作自动熄屏,再次点亮需要输入密码,会不会疯?如果你觉得不会,那就亲自试一试,设置成可以设置的最短时间,坚持一周就好(不排除有人适应这个时间,毕竟手机厂商也是有用户体验研究的)。

然后新问题产生了,如果用户在正常操作的过程中,Token 过期失效了,要求用户重新登录……用户体验岂不是很糟糕?

为了解决在操作过程不能让用户感到 Token 失效这个问题,有一种方案是在服务器端保存 Token 状态,用户每次操作都会自动刷新(推迟) Token 的过期时间——Session 就是采用这种策略来保持用户登录状态的。然而仍然存在这样一个问题,在前后端分离、单页 App 这些情况下,每秒种可能发起很多次请求,每次都去刷新过期时间会产生非常大的代价。如果 Token 的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率,减少消耗,会把 Token 的过期时保存在缓存或者内存中。

还有另一种方案,使用 Refresh Token,它可以避免频繁的读写操作。这种方案中,服务端不需要刷新 Token 的过期时间,一旦 Token 过期,就反馈给前端,前端使用 Refresh Token 申请一个全新 Token 继续使用。这种方案中,服务端只需要在客户端请求更新 Token 的时候对 Refresh Token 的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然 Refresh Token 也是有有效期的,但是这个有效期就可以长一点了,比如,以天为单位的时间。
参考技术D 设备配网的令牌 token 的有效期为 5 分钟,过期以后需要使用 refresh_token 来换取新的令牌。

登录token有效期法规

参考技术A 不低于三年。中国银行的token有效期不低于3年,如果您的token显示已过期,那么可以携带身份证、中银e令前往中国银行网点更换。

以上是关于会话token的最大有效期的主要内容,如果未能解决你的问题,请参考以下文章

用户退出登陆后,token依旧有效的问题 及解决方法

redis常见问题

redis常见问题

access token有效期多少秒

Laravel TokenMismatchException 会话超时

jwt中为什么用refresh_token去刷新access_token,直接把access_token的有效期设置长一点不行吗?