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

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过期的异常

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

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

2周前

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

2周前

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

2周前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!