令牌无状态和存储

问题描述 投票:1回答:2

我一直在阅读很多关于不在用户代理存储中保存令牌的内容,并且我同意所提到的风险。但是通过一些Auth0快速入门示例,我看到令牌被保存在会话中并使用会话cookie来跟踪它们。

其他人提到将实际令牌保存为httpOnly cookie,风险较低。

我的问题是:

  • 那被认为是无国籍的?特别是具有可扩展性和负载平衡器的潜在用途。
  • 替代品,内存缓存和数据库存储?会话有什么不同吗?
  • 在SPA的情况下,如何保持记住我的功能?
oauth-2.0 jwt auth0 oidc
2个回答
2
投票

Asi Kavindu写道,localStorage是个好地方。如果您想保护应用程序免受XSS攻击,请使用Content Security Policy,因此浏览器只执行您的JavaScript代码。最近有关于OAuth 2.0 and Browser-Based Apps最佳实践的RFC,所以你可以查看它。

如果要在后端使用多个后端节点(群集)保持状态(会话),则可以使用某些共享数据存储,例如数据库或Hazelcast。该体系结构的状态与具有内存中会话的单个后端节点相同。

如果您的后端和cookie上有会话,则不再需要访问令牌,因为yor SPA仅调用您的后端,并且令牌与cookie中的会话ID的用途相同。

记住我的功能可以使用cookie在您的身份验证提供程序(可能是从安全角度更好的选择)或您自己的应用程序中实现。

架构选择通常在简单性和可伸缩性之间进行权衡。如果你刚刚开始开发应用程序并且不确定要选择什么,我会简单地说,因为即使你想稍后改变它,它也应该更容易重构。


1
投票

维护会话仅适用于应用程序的后端。从纯粹的SPA角度来看,在localstorage中存储令牌是可以接受的并且相对安全。与其他方法相比,现代浏览器具有保护loaclsotrage的能力。

如果您有后端,则将访问令牌关联到会话比将其存储在cookie中更好。此外,您可以获得的一个优势是能够获得可以存储在后端的刷新令牌。

拥有cookie意味着失去无国籍状态。 Cookie用于维护服务器端和客户端之间的状态。会话维护需要服务器资源,但我认为您不必担心这一点。必须针对您的特定要求进行扩展。

记住我的功能再次是使用cookie构建的东西。它是授权服务器提供的功能。将其视为您的浏览器记住您的Facebook已登录状态。它使用cookie,您的应用程序不必担心。

© www.soinside.com 2019 - 2024. All rights reserved.