在 cookie 中存储访问令牌和刷新令牌

Store Access Token and Refresh Token in cookies

我知道我可以使用 OAuth、OpenID 或 SAML。但是,我想知道我是否可以采取更简单的方法,因为我的应用程序在同一子域下 运行 并且我已正确配置 CORS。

这些应用程序要么内置于 React 中,要么内置于带有防伪令牌的服务器端 Razor Pages。
对于这两类应用,是否可以存储?

以下符合OAuth模式。希望这些指示能让你前进一点,尽管我不知道你的应用程序的数据敏感性等因素。

刷新令牌

如果将其存储在 cookie 中,则使用这些属性:

  • SameSite=严格
  • 仅限 HTTP
  • 安全
  • 域=admin.mycompany.com
  • 路径:/login/refresh

访问令牌

执行相同的操作并根据需要使用不同的路径。避免使用非 HTTP Only cookie,因为浏览器中的恶意代码可以通过读取 document.cookie.

来获取令牌

另一种选择是发送 RT cookie 以获取浏览器的访问令牌并将其存储在内存中 - 请参阅 BFF TMI

但是请注意,不鼓励使用浏览器中的访问令牌,因为它们具有更多风险并且需要更多缓解措施 - 请参阅 this video

加密

使用 AES256 加密包含令牌的 cookie 和一个只有服务器端已知的秘密。

范围

理想情况下,每个应用程序都应该重定向并获得自己的独立令牌,否则存在 App1 用户拥有 App3 权限的风险 - 请确保您的后端授权处理此问题。