arn*_*hky 44 authentication rest web-services jwt
从概念上讲,我非常喜欢JWT,因为它符合REST等无状态(没有状态保存服务器端,所有相关数据都包含在令牌中).
我不确定的是:如果没有连接(例如,"记住我"功能),你将如何处理令牌到期?
网络上有一个新兴的JWT报道,但我找不到任何回答过期问题的人.
澄清:我不会问如何处理令牌即将到期,但是当令牌已经过期时(用户关闭网站/应用程序一段时间)该怎么办.我想到的最简单的解决方案是缓存用户的凭据,这是相当不安全的.
对于如何从理论上实现记住我功能的给定问题,没有非黑即白的答案。关于为什么不应该做某事给出了许多理论上的论点,而同时对于应该如何实际做的问题没有给出明确的答案。
记住我隐含地带来了一个问题,即您需要更长的令牌到期时间窗口,这是没有办法解决的。最安全的方式是让用户定期登录并给出短暂的到期时间;但是实际上没有人喜欢这一点,因此在权衡理论安全完善与实际措施的情况下进行了权衡。
这种权衡的工作方式是修补令牌长期到期所带来的缺陷。但是请不要误会,您将需要一个长期限的 jwt / cookie(无论您使用两个令牌,实现一些二级刷新机制还是其他什么,最终您都会遇到同样的问题)!
根据我读过的关于其他人如何做到的文章,这就是它的完成方式。
我将实现这一点的方法是,当用户检查记住我时,为存储在 httpOnly/安全 cookie 中的 jwt 提供 3 个月的到期时间。
注销时只需清除 cookie。
显然,使用 https / CSRF 措施进行保护。
如果您不同意它,请停止大惊小怪并提供替代解决方案 - 我已经阅读了无数的讨论,这显然没有。
如果这个问题有一个直接的解决方案,那么一开始就可能不会有这么多的讨论。
如果我遵循,我不太确定,但我会写出我的想法.
想象一下令牌作为酒店卡,您提前支付5天(记住我将在5天后到期).我可以在5天内进入建筑物,车库,房间等,在这5天之后,它将不再起作用.
令牌已经过期时该怎么办?什么都没有.
想象一下,我支付了5天的费用,我有一个紧迫感,我回家了(口袋里的卡片).酒店根本不关心,当5天过去时,卡片只是一块无用的塑料,如果你试图在酒店使用,它什么都不做.
所以回到web开发.如果您提供记住我的服务,您可以设置一个有效期,比如7天.只要用户拥有令牌,他就可以毫无问题地访问服务.如果他丢失了令牌,他需要再次登录.如果他使用令牌并且已经过期,他也需要再次登录.
如果他登录,他会获得一个令牌7天,如果他不再使用它,20天后他又来了,他需要再次登录,服务器将拒绝你的请愿,直到你这样做.
如果你在前端使用像角度这样的东西,我会做的是在启动时检查令牌验证,这样你就可以获得良好的用户体验.
我不明白你的问题是de caching的事情.
除了@Jesus答案之外,您还可以考虑实施刷新令牌系统:https : //auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
在酒店示例中,您的酒店卡(访问令牌)在时间X之后将无效,但是在接待处,您可以使用护照(刷新令牌)再次获取新的酒店卡。
您可以将刷新令牌与有关用户正在使用的设备的其他数据一起存储在数据库中,以允许他在设备被盗时禁用该设备。
例:
对于下一个请求,客户端发送访问令牌
现在检查访问令牌是否已过期:
5.1访问令牌未过期,一切正常
5.2访问令牌已过期,请检查数据库中是否有刷新令牌
5.2.1刷新令牌在数据库中,返回新的访问令牌
5.2.2数据库中没有刷新令牌,返回401 /注销,用户必须再次登录
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
11038 次 |
| 最近记录: |