Laravel jwt 的参数设置逻辑貌似有点小问题

jwt 中定义了 token 的有效时间 ttl(官方默认是 1 个小时),token 的有效刷新时间 refresh_ttl(官方默认是 2 周),假如现在生成某个 token,那么:
一个小时内 : token 可以正常使用
一个小时外,两周内: 解析 token 会抛出异常 token 过期,需要人为捕获异常再去刷新 token(即重新生成 token)返回
两周外 : 解析 token 抛出异常 token 过期,捕获异常去刷新 token 抛出无法刷新异常。
从上可知,
token 的有效时间 ttl < tokentoken 的有效刷新时间 refresh_ttl,
刷新前提是捕获解析 token 时抛出的过期异常。

为什么不反过来这么设置:
token 的有效时间 ttl > tokentoken 的有效刷新时间 refresh_ttl,
即设置 ttl 为 2 周,refresh_ttl 为 1 个小时,那么:
一个小时内 : token 可以正常使用
一个小时外,两周内:解析 token 时,token 没有过期,但是需要刷新,并返回刷新后的 token
两周外:解析 token 时,抛出 token 过期的异常

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3

你怎么不说 token 无限制的 ttl 啊,这样就都不用刷新了,岂不是更好。

6年前 评论

token 失效,可以使用 refreshtoken 进行刷新,如果 refreshtoken 都失效了,就需要重新授权了。
通讯中是使用 token 来作为通行证的,设置较短的 ttl 是为了安全 (比如泄露等),这样就重新领取一张令牌 (凭有效的 refeshtoken),如果连重新领取的资格都没了 (refreshtoken 过期),就要重新鉴权了,重新验证身份获取 token 和 refreshtoken。

6年前 评论

回答你的问题:
如果设置 token 为 2 周,refreshtoken 为 1 小时。那我还捕捉什么异常啊。直接使用 token 两周后拉倒啊。refreshtoken 就没有起到作用了。
比如:去某某重要基地,首先需要邀请函 (身份授权), 领取一个访客牌。把邀请函看做 refreshtoken. 访客牌看做是 token.
然后规定邀请函 24 小时内生效,访客牌 2 小时生效。访客牌过期了,到前台凭邀请函重新领取一个访客牌。
这样相安无事,如果按照你的逻辑调过来。邀请函 2 小时有效,访客牌 24 小时有效,你还会自觉的使用邀请函
去重新换取访客牌吗?而且假如你的访客牌弄丢了,被别人捡到了,人家就可以冒用你的身份进行最多 24 小时的访问。
而如果是 token 是 2 小时有效,即使别别人获取到了,别人也最多冒用你的身份两小时。

6年前 评论