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