gpt4 book ai didi

web-services - 使用 JWT 处理过期/"remember me"功能

转载 作者:行者123 更新时间:2023-12-03 06:41:40 31 4
gpt4 key购买 nike

从概念上讲,我真的很喜欢 JWT,因为它符合 REST 等的无状态性(没有状态保存服务器端,所有相关数据都包含在 token 中)。

我不确定的是:未连接时如何处理 token 过期(即“记住我”功能)?

网络上有关于 JWT 的新兴报道,但我还找不到任何人回答过期问题。

澄清:我不是问如何处理即将过期的 token ,而是问当 token 已经过期(用户关闭网站/应用程序一段时间)时该怎么办。我想到的最简单的解决方案是缓存用户的凭据,这是相当不安全的。

最佳答案

对于如何从理论上实现“记住我”功能的给定问题,没有一个黑白分明的答案。对于为什么不应该做某事给出了很多理论论证,但同时对于实际上应该如何做的问题却没有给出明确的答案。

Remember-me 隐式地带来了一个问题,即您需要更长的 token 过期时间,这是没有办法解决的。最安全的方法是让用户定期登录并给予短暂的过期时间;但实际上没有人喜欢这样做,因此需要在理论上的安全完美性与实际措施之间进行权衡。

这种权衡的方式是通过修补代币过期时间较长带来的缺陷。但请不要误会,你将需要一个具有较长有效期的 jwt/cookie(无论你使用两个 token ,实现一些辅助刷新机制还是其他什么,最后你都会遇到同样的问题)!
根据我读过的关于其他人如何做到这一点的文章,这就是它的完成方式。

我实现这一点的方法是,当用户检查 Remember-me 时,为存储在 httpOnly/secure cookie 中的 jwt 提供 3 个月的有效期。
注销时只需清除 cookie。
显然,使用 https/CSRF 措施进行保护。

如果您不同意它,请停止大惊小怪并提供替代解决方案 - 从我读过的无数讨论中显然找不到该解决方案。
如果问题有一个简单的解决方案,那么一开始可能就不会有那么多讨论了。

编辑:

您可以使用刷新 token 机制,但只有当您验证刷新 token 使用的时间间隔时,它才有效。例如,根据访问 token 的生命周期,您可以控制允许用户刷新 token 的频率。如果间隔显示可疑事件,您应该撤销所有客户端的两个 token 。
该问题围绕着访问 token 或刷新 token 理论上会被盗的想法。因此,仅仅拥有刷新机制而没有额外的安全性基本上是没有用的。如果您可以窃取访问 token ,那么您也可以窃取刷新 token 。

关于web-services - 使用 JWT 处理过期/"remember me"功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23603801/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com