我一直在阅读很多关于不在用户代理存储中保存令牌的内容,并且我同意所提到的风险。但是通过一些Auth0快速入门示例,我看到令牌被保存在会话中并使用会话cookie来跟踪它们。
其他人提到将实际令牌保存为httpOnly cookie,风险较低。
我的问题是:
Asi Kavindu写道,localStorage
是个好地方。如果您想保护应用程序免受XSS攻击,请使用Content Security Policy,因此浏览器只执行您的JavaScript代码。最近有关于OAuth 2.0 and Browser-Based Apps最佳实践的RFC,所以你可以查看它。
如果要在后端使用多个后端节点(群集)保持状态(会话),则可以使用某些共享数据存储,例如数据库或Hazelcast。该体系结构的状态与具有内存中会话的单个后端节点相同。
如果您的后端和cookie上有会话,则不再需要访问令牌,因为yor SPA仅调用您的后端,并且令牌与cookie中的会话ID的用途相同。
记住我的功能可以使用cookie在您的身份验证提供程序(可能是从安全角度更好的选择)或您自己的应用程序中实现。
架构选择通常在简单性和可伸缩性之间进行权衡。如果你刚刚开始开发应用程序并且不确定要选择什么,我会简单地说,因为即使你想稍后改变它,它也应该更容易重构。
维护会话仅适用于应用程序的后端。从纯粹的SPA角度来看,在localstorage
中存储令牌是可以接受的并且相对安全。与其他方法相比,现代浏览器具有保护loaclsotrage的能力。
如果您有后端,则将访问令牌关联到会话比将其存储在cookie中更好。此外,您可以获得的一个优势是能够获得可以存储在后端的刷新令牌。
拥有cookie意味着失去无国籍状态。 Cookie用于维护服务器端和客户端之间的状态。会话维护需要服务器资源,但我认为您不必担心这一点。必须针对您的特定要求进行扩展。
记住我的功能再次是使用cookie构建的东西。它是授权服务器提供的功能。将其视为您的浏览器记住您的Facebook已登录状态。它使用cookie,您的应用程序不必担心。