使用内存中 JWT 令牌保护 React 应用程序

发布于 2025-01-11 13:47:47 字数 972 浏览 0 评论 0原文

我使用“公共”SSO 客户端将 React SPA 配置为与 Keycloak 配合使用。

我将 JWT 访问令牌存储在 Redux 存储中(在生产中禁用开发工具)。

我不会在本地存储、会话存储或 Cookie 中存储任何内容。

由于我的令牌位于 Redux 存储中,因此可以公平地说,令牌存储在内存中(在页面刷新时,您将被短暂重定向回 Keycloak)。

遵循 Auth0 的 此文档页面

Auth0 建议将令牌存储在浏览器内存中作为最安全的选项。使用 Web Workers 处理令牌的传输和存储是保护令牌的最佳方法,因为 Web Workers 与应用程序的其余部分在单独的全局范围内运行。使用 Auth0 SPA SDK,其默认存储选项是利用 Web Workers 的内存存储。如果您无法使用 Web Workers,Auth0 建议您使用 JavaScript 闭包来模拟私有方法作为替代方案。

因此,就我而言,我使用“JavaScript 闭包来模拟私有方法”方法 (CRA)。

Redux 存储不可公开访问,React 进程在运行时包含在 JavaScript 内存中。

我还强制执行 HTTPS,我添加了 Node Helmet 并且我有一个相当强大的 CSP 策略在 Keycloak 和 React 应用程序中。更不用说我的“公共”SSO 客户端在“Web 起源”和“重定向 URL”方面非常严格。

我认为我的解决方案非常安全可靠,但其他人的想法不同。

你怎么认为?

I configured my React SPA to work with Keycloak using a "Public" SSO client.

I'm storing the JWT Access Token inside the Redux store (dev-tools disabled in production).

I'm not storing anything inside the Local Storage, Session Storage or as a Cookie.

Since my token is inside the Redux store, it's fair to say that the token is stored in-memory (on page refresh you will be briefly redirected back to Keycloak).

Following this documentation page from Auth0:

Auth0 recommends storing tokens in browser memory as the most secure option. Using Web Workers to handle the transmission and storage of tokens is the best way to protect the tokens, as Web Workers run in a separate global scope than the rest of the application. Use Auth0 SPA SDK whose default storage option is in-memory storage leveraging Web Workers. If you cannot use Web Workers, Auth0 recommends as an alternative that you use JavaScript closures to emulate private methods.

So, in my case, I'm using "JavaScript closures to emulate private methods" approach (CRA).

The Redux store is not publicly accessible and the React process is contained within the JavaScript memory at runtime.

I'm also enforcing HTTPS, I added Node Helmet and I have a quite strong CSP policy both inside Keycloak and React application. Not to mention that my "Public" SSO client is very restrictive in terms of "Web Origins" and "Redirect URLs".

I think my solution is pretty secure and solid, but other people thinks differently.

What do you think?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文