jwt怎么验证token过期,jwt获取过期时间
00-1010JWT设置令牌过期时间无效原因分析JWT令牌过期自动续订解决方案JWTtokentoken过期刷新方案
目录
00-1010设置超时的顺序不对,应该调用setClaims()方法设置Claims属性。
通过调用setExpiration()方法设置超时。
Date expiresDate=新日期(system . current time millis()expire _ time);//expire_time是令牌的有效时长,单位为毫秒错误顺序示例:.
JwBuilder结果=jWTS。构建器()。set expiration(date)//在setClaims之前设置超时。SetClaims(索赔)。Signwith(签名算法。HS 256,常量。base64 secret);正确顺序示例:
T builder结果=jwts.builder()。setClaims(claims)//先调用set claims,再调用set expiration . set expiration(date)。用(signaturealgorithm.hs256,constants.base64secret)签名;
00-1010//io . jsonwebtoken . impl . default jwt builder # set expiration code @ override public jwt builder set expiration(dateep){ if(exp!=null) {//如果设置的时间不为空,则调用ensureClaims方法ensureclaims()。set expiration(exp);} else { if (this.claims!=null){//no inspection constant conditions this . claims . set expiration(exp);} }还这个;}//io . jsonwebtoken . impl . defaultjwtbuilder # ensure claims code protected claims ensure claims(){//如果claims为null,则创建一个新的示例。这里没有问题,如果(this . claims==null){ this . claims=newdefaultclaims();}返回this.claims}//code @ override public jwt builder set claims(声明)in io . jsonwebtoken . impl . defaultjwt builder # set claims(io . jsonwebtoken . claims){//直接给声明赋值。该操作覆盖了先前设置的超时。//最终构造令牌时,不设置超时。索赔=索赔;还这个;}
JWT 设置token过期时间无效
00-1010JWT是JSON Web Token的全称,由三部分组成:header(头,用来描述这个JWT最基本的信息,比如它的类型,签名使用的算法等。)、payload(有效载荷,有效信息存储在哪里,到期时间存储在这部分)和Signature(签证,签证信息)。
原因
token是后端生成的JWT字符串值。在前端和后端的分离中,token是前端合法身份和权限访问后端接口的凭证。
原因分析
1、单点登录
当用户登录时,后端在成功验证用户后生成两个令牌。这两个令牌分别是access_token(接入接口使用的令牌)和refresh_token(access_token过期后用于续订的令牌,请注意设置refresh _ token的过期时间比access _ token长)。后端将用户信息和这两个令牌存储在redis中,并返回给前端。
前端获取成功登录返回的两个令牌后,将其存储在localStorage中。
2、接口请求
封装前端统一接口请求函数和令牌刷新函数,请求成功后检查返回结果。如果令牌过期,调用令牌刷新函数来请求新令牌。
后端收到令牌刷新请求后,结合redis中存储的用户信息、令牌和refresh_token对请求参数进行验证,生成新的令牌和refresh_token存储在redis中返回给前端。至此,令牌刷新完成。
3、多请求应对
所谓多请求,就是短时间内同时发生多个请求。如果此时令牌已经过期,所有这些请求都将出现令牌过期请求失败。
为了避免重复刷新令牌,您需要设置令牌刷新开关isRefresh。当请求中的令牌过期时,此时将调用令牌刷新函数。同时关闭开关,将isRefresh的值设置为false,避免后续请求调用令牌刷新函数。
当发现令牌过期时,我们将推迟请求,直到令牌被刷新,然后重新执行请求。这里采用了Promise函数,每个令牌过期的请求都存储在一个Promise函数集中。令牌刷新后,打开开关将isRefresh的值设置为true,然后批量执行Promise函数集中的Promise函数,返回请求结果。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。