java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Token过期自动续期

Token过期实现自动续期的方法步骤

作者:海棠Flower未眠

本文详细解析了Token在防止表单重复提交、身份验证及过期处理中的应用,涵盖Token的生成流程、过期机制及续期方案,特别介绍了单token与双token两种策略,需要的朋友可以参考下

相信小伙伴对Token再熟悉不过了,token主要有两个作用:

一、Token的作用

1.防止表单重复提交

防止表单重复提交一般还是使用前后端都限制的方式。比如:在前端点击提交之后,将按钮置为灰色,不可再次点击,然后客户端和服务端的token各自独立存储,客户端存储在Cookie或者Form的隐藏域中,服务端存储在Session或者其他缓存系统中。

2.用来作身份验证(流程)

① 客户端使用用户名跟密码请求登录;

②通过ajax向后端发送请求;

③服务端收到请求,去验证用户名与密码;

④验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;

⑤客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;

⑥客户端每次向服务端请求资源的时候需要带着服务端签发的 Toke(不管是你自己写的)它都要通过ajax向后端发送请求,这时服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。

二、Token‌过期

Token‌过期通常意味着身份验证的凭证已经达到其设定的有效期,需要用户重新进行身份验证或使用刷新Token来获取新的访问Token。 

这种情况通常发生在以下几种情境中:

处理Token过期的方法包括:

JWT token的 payload 部分是一个json串,是要传递数据的一组声明,这些声明被JWT标准称为claims。

JWT标准里面定义的标准claim包括:

除了以上标准声明以外,我们还可以自定义声明。以 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()));

其中:

JWT设置了过期时间以后,一定超过,那么接口就不能访问了,需要用户重新登录获取token。如果经常需要用户重新登录,显然这种体验不是太好,因此很多应用会采用token过期后自动续期的方案,只有特定条件下才会让用户重新登录。

三、token过期的续期方案

解决token过期的续期问题可以有很多种不同的方案,这里举一些比较有代表性的例子。首先我们看一个单token方案,这个方案除了可以实现token续期以外,还可以实现某些条件下的强制重新登录。

3.1.单token方案

另外后端还可以记录刷新token的次数,比如最多刷新50次,如果达到50次,则不再允许刷新,需要用户重新授权。

上面介绍的单token方案原理比较简单。下面我们再看一个双token方案。

3.2.双token方案

微信网页授权是通过OAuth2.0机制实现的,也使用了双token方案。

微信网页授权方案:

后端实现token过期还可以利用Redis来存储token,设置redis的键值对的过期时间。如果发现redis中不存在token的记录,说明token已经过期了。

以上就是Token过期实现自动续期的方法步骤的详细内容,更多关于Token过期自动续期的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文