首页 » Web前端 » phpjwt过时刷新技巧_JWT token过时后自动续期的解决筹划

phpjwt过时刷新技巧_JWT token过时后自动续期的解决筹划

访客 2024-11-08 0

扫一扫用手机浏览

文章目录 [+]

在文中给出的例子中,仅实现了登录认证,但是并没有设置token的过期韶光,在实际运用中,token一样平常都须要设置过期韶光。

如何设置token的过期韶光

前文《Java口试常见问题:JWT是什么?》先容过,JWT token的 payload 部分是一个json串,是要通报数据的一组声明,这些声明被JWT标准称为claims。

phpjwt过时刷新技巧_JWT token过时后自动续期的解决筹划

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

phpjwt过时刷新技巧_JWT token过时后自动续期的解决筹划
(图片来自网络侵删)
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方案实现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已经由期了。

我会持续更新关于物联网、云原生以及数字科技方面的文章,用大略的措辞描述繁芜的技能,也会偶尔揭橥一下对IT家当的意见,请大家多多关注,欢迎留言和转发,希望与大家互动互换,感激。

标签:

相关文章

1340php技巧_thinkphp5博客项目实战视频

thinkphp5博客项目实战视频最近有很多小伙伴在找tp5干系视频以及源码,这里将视频连接以及代码地址奉上供应大家快速入手,本视...

Web前端 2024-12-08 阅读0 评论0

exehackphp技巧_MySQL必知必会的常识点

SQL 措辞是访问数据库最常用的标准化措辞。MySQL 软件采取了 GPL(GNU 通用公共容许证 ,它分为免费版和商业版,由于其...

Web前端 2024-12-08 阅读0 评论0