我正在使用JWT构建我的第一个API。我正在使用这个样板项目:https://github.com/krisanalfa/lumen-jwt
我设法使其运行良好,但我遇到了一个大问题:用户令牌在一段时间后过期,将用户从应用程序中删除。我已经阅读了项目文档来调用 / api / auth / refresh 来刷新令牌,但是现在我觉得它有两个主要缺点:
1)你只需要对API进行一次调用就可以刷新令牌,我想你必须设置一个计时器,每隔X分钟(令牌到期时间)调用它。
2)如果用户关闭计算机3小时,当他重新打开计算机时,令牌已经过期,使刷新无法使用,并将用户注销。
由于我是新手,我错过了什么?如何在没有这些缺点的情况下使令牌刷新周期工作?
答案 0 :(得分:1)
拿两点。
1)您可以使令牌仅对一次使用有效,但使用黑名单功能。然而,这并非完全必要。
在我自己的项目中,我给了令牌5分钟到期,但我也将jwt-refresh
中间件应用到我的身份验证路由(包含在路由组中),以便每次请求都返回一个新令牌。
2)您还可以指定刷新到期时间,该时间是可以验证过期令牌的窗口。这通常比令牌长得多。我用了14天。
因此,如果用户离开您的网站3小时后又回来,他们的令牌将会过期。但是,您的应用应尝试在后台刷新该令牌,然后重新尝试原始请求。
考虑各个令牌生命周期的明显安全隐患。 5分钟是滥用的简短窗口,但如果过期的令牌可以刷新长达14天,则会增加风险,除非您将其列入黑名单。