当前位置:首页 > 实用技巧 >

jwt过期了怎么处理(jwt过期时间存储在哪)

来源:原点资讯(www.yd166.com)时间:2023-06-09 08:07:42作者:YD166手机阅读>>

前面一篇文章《》介绍了基于SpringBoot实现JWT登录认证的基本思路,我们使用了com.auth0 这样一个JWT实现。

在文中给出的例子中,仅实现了登录认证,但是并没有设置token的过期时间,在实际应用中,token一般都需要设置过期时间。

如何设置token的过期时间

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

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

  • 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方案

jwt过期了怎么处理,jwt过期时间存储在哪(1)

单token方案实现token续期

  1. 将 token 过期时间设置为15分钟;
  2. 前端发起请求,后端验证 token 是否过期;如果过期,前端发起刷新token请求,后端为前端返回一个新的token;
  3. 前端用新的token发起请求,请求成功;
  4. 如果要实现每隔72小时,必须重新登录,后端需要记录每次用户的登录时间;用户每次请求时,检查用户最后一次登录日期,如超过72小时,则拒绝刷新token的请求,请求失败,跳转到登录页面。

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

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

双token方案

  1. 登录成功以后,后端返回 access_token 和 refresh_token,客户端缓存此两种token;
  2. 使用 access_token 请求接口资源,成功则调用成功;如果token超时,客户端携带 refresh_token 调用token刷新接口获取新的 access_token;
  3. 后端接受刷新token的请求后,检查 refresh_token 是否过期。如果过期,拒绝刷新,客户端收到该状态后,跳转到登录页;如果未过期,生成新的 access_token 返回给客户端。
  4. 客户端携带新的 access_token 重新调用上面的资源接口。
  5. 客户端退出登录或修改密码后,注销旧的token,使 access_token 和 refresh_token 失效,同时清空客户端的 access_token 和 refresh_toke。

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

jwt过期了怎么处理,jwt过期时间存储在哪(2)

微信网页授权

微信网页授权方案

  • 用户在第三方应用的网页上完成微信授权以后,第三方应用可以获得 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产业的看法,请大家多多关注,欢迎留言和转发,希望与大家互动交流,谢谢。

栏目热文

删除开始菜单文档中的历史记录(怎么删除开始菜单中的项目)

删除开始菜单文档中的历史记录(怎么删除开始菜单中的项目)

你是否有过这样的操作,你用公司电脑打印个人简历,而你又不想让别人知道你的这个操作,想删除电脑里面的记录。下面教你如何操作...

2023-06-09 07:39:46查看全文 >>

怎么取出jwt里的数据(jwt怎么获取额外信息)

怎么取出jwt里的数据(jwt怎么获取额外信息)

前文《》介绍了目前应用最多的会话管理方案还是基于token的方案,不仅有很多实现,而且还有现成的标准可用,这个标准就是J...

2023-06-09 07:36:00查看全文 >>

jwt如何清除(jwt过期怎么设置)

jwt如何清除(jwt过期怎么设置)

知识回顾众所周知,在 OAuth2 体系中认证通过后返回的令牌信息分为两大类:不透明令牌(opaque tokens) ...

2023-06-09 08:19:20查看全文 >>

怀旧服战场经验(怀旧服战场经验修复)

怀旧服战场经验(怀旧服战场经验修复)

暴雪在今天凌晨发布了蓝贴宣布了巫妖王之怒怀旧服P3阶段开放日程表,下面带大家一起解读蓝贴内容,文中提及的时间仅适用于亚服...

2023-06-09 08:07:52查看全文 >>

怀旧服如何开启战场(怀旧服怎么开启各种信息)

怀旧服如何开启战场(怀旧服怎么开启各种信息)

魔兽世界怀旧服pvp荣誉系统已经上线,战场也将在12月10日上线奥特兰克山谷战场和战歌峡谷战场,那么这个战歌峡谷战场部落...

2023-06-09 08:12:50查看全文 >>

如何删除运行中的记录(删除运行里的记录)

如何删除运行中的记录(删除运行里的记录)

通常,在电脑使用过程中会自动记录一些用户的使用信息,这涉及面很广,比如今天你上网浏览了哪些内容?还比如你今天是否登录了你...

2023-06-09 07:55:04查看全文 >>

jwt如何去掉(jwt过期怎么设置)

jwt如何去掉(jwt过期怎么设置)

JWT 引入JSONwebtoken(JWT)是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在...

2023-06-09 07:47:42查看全文 >>

wta 管理工具(wta官方app)

wta 管理工具(wta官方app)

WTA(国际女子网球协会)和全球技术合作伙伴SAP联手推出名为“WTA大学”(WTA University)的全新教育平...

2023-06-09 07:39:51查看全文 >>

删除运行中的记录(如何清除开始运行的记录)

删除运行中的记录(如何清除开始运行的记录)

运行,可以点击左下角的开始菜单找到,也可以直接按 Win R组合键,打开运行,通常我们用过的一些命令,都会被运行保留...

2023-06-09 07:58:08查看全文 >>

jwt只能创建不能删除(jwt登录权限怎么改)

jwt只能创建不能删除(jwt登录权限怎么改)

今天,JSON Web Tokens 广泛用于应用程序中以共享安全信息。尽管如此,它们并非完全万无一失,可能会为攻击者打...

2023-06-09 07:44:06查看全文 >>

文档排行