首页 > 解决方案 > 代币无状态和存储

问题描述

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

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

我的问题是:

标签: oauth-2.0jwtauth0openid-connect

解决方案


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

如果您想在具有多个后端节点(集群)的后端保持状态(会话),您可以使用一些共享数据存储,例如数据库或 Hazelcast。该架构是有状态的,与具有内存会话的单个后端节点相同。

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

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

架构选择通常是简单性和可扩展性之间的权衡。如果您刚刚开始开发应用程序并且不确定选择什么,我会尽量简单,因为即使您以后想更改它,重构也应该更容易。


推荐阅读