在 cookie 中存储访问令牌和刷新令牌
Store Access Token and Refresh Token in cookies
我知道我可以使用 OAuth、OpenID 或 SAML。但是,我想知道我是否可以采取更简单的方法,因为我的应用程序在同一子域下 运行 并且我已正确配置 CORS。
- https://admin.mycompany.com/app1
- https://admin.mycompany.com/app2
- https://admin.mycompany.com/app3
- https://admin.mycompany.com/login(单点登录)
这些应用程序要么内置于 React 中,要么内置于带有防伪令牌的服务器端 Razor Pages。
对于这两类应用,是否可以存储?
- 可从 javascript 访问的 Cookie 中的访问令牌(短期)(JWT)(<4Kb)
- 无法从 javascript 访问 Cookie 中的刷新令牌 (HttpOnly)(长期存在)
以下符合OAuth模式。希望这些指示能让你前进一点,尽管我不知道你的应用程序的数据敏感性等因素。
刷新令牌
如果将其存储在 cookie 中,则使用这些属性:
- SameSite=严格
- 仅限 HTTP
- 安全
- 域=admin.mycompany.com
- 路径:/login/refresh
访问令牌
执行相同的操作并根据需要使用不同的路径。避免使用非 HTTP Only cookie,因为浏览器中的恶意代码可以通过读取 document.cookie.
来获取令牌
另一种选择是发送 RT cookie 以获取浏览器的访问令牌并将其存储在内存中 - 请参阅 BFF TMI。
但是请注意,不鼓励使用浏览器中的访问令牌,因为它们具有更多风险并且需要更多缓解措施 - 请参阅 this video。
加密
使用 AES256 加密包含令牌的 cookie 和一个只有服务器端已知的秘密。
范围
理想情况下,每个应用程序都应该重定向并获得自己的独立令牌,否则存在 App1 用户拥有 App3 权限的风险 - 请确保您的后端授权处理此问题。
我知道我可以使用 OAuth、OpenID 或 SAML。但是,我想知道我是否可以采取更简单的方法,因为我的应用程序在同一子域下 运行 并且我已正确配置 CORS。
- https://admin.mycompany.com/app1
- https://admin.mycompany.com/app2
- https://admin.mycompany.com/app3
- https://admin.mycompany.com/login(单点登录)
这些应用程序要么内置于 React 中,要么内置于带有防伪令牌的服务器端 Razor Pages。
对于这两类应用,是否可以存储?
- 可从 javascript 访问的 Cookie 中的访问令牌(短期)(JWT)(<4Kb)
- 无法从 javascript 访问 Cookie 中的刷新令牌 (HttpOnly)(长期存在)
以下符合OAuth模式。希望这些指示能让你前进一点,尽管我不知道你的应用程序的数据敏感性等因素。
刷新令牌
如果将其存储在 cookie 中,则使用这些属性:
- SameSite=严格
- 仅限 HTTP
- 安全
- 域=admin.mycompany.com
- 路径:/login/refresh
访问令牌
执行相同的操作并根据需要使用不同的路径。避免使用非 HTTP Only cookie,因为浏览器中的恶意代码可以通过读取 document.cookie.
来获取令牌另一种选择是发送 RT cookie 以获取浏览器的访问令牌并将其存储在内存中 - 请参阅 BFF TMI。
但是请注意,不鼓励使用浏览器中的访问令牌,因为它们具有更多风险并且需要更多缓解措施 - 请参阅 this video。
加密
使用 AES256 加密包含令牌的 cookie 和一个只有服务器端已知的秘密。
范围
理想情况下,每个应用程序都应该重定向并获得自己的独立令牌,否则存在 App1 用户拥有 App3 权限的风险 - 请确保您的后端授权处理此问题。