OAuth 刷新令牌架构

OAuth Refresh Token Architecture

我有多个 Web 应用程序要使用我们的 oauth 提供程序。所有 Web 应用程序都存在于不同的域中。例如,a.com b.com 和 c.com.

访问令牌端点时我的 oauth 提供程序 returns 通过仅 http cookie 的刷新令牌。理论上这很好,但浏览器不会接受该 cookie,因为它是跨域 cookie。 (我几乎尝试了一切以允许这样做。见下文。)

Cookie Settings
Same Site: none
secure: true
domain: null
http only: true

I have tried setting the cors of the web app to allow the auth api end point

CORS settings:
WithOrigins: "the url of the api"
WithMethods : "GET, POST"
WithHeaders: "Content-Type, *"
AllowCredentials : true

我的 oauth 提供商如何发回我可以安全地存储在客户端上的刷新令牌?

通常的解决方案是 OAuth 提供程序(授权服务器)向您的后端颁发令牌,然后应用程序在与 Web 来源相同的站点中为浏览器颁发自己的第一方 cookie,因此不受浏览器跨域 cookie 限制。

最容易管理的选项可以是将令牌存储在 AES256 加密的 HTTP Only SameSite=strict cookie 中,其解密密钥只有服务器知道。

令牌处理程序模式

其中一个有趣的变化是 API 发布单页应用程序使用的安全 cookie。这涉及使用相关域的托管。 API 发布的 Cookie 与 Web 来源位于同一站点,而不是跨域:

有关 SPA 解决方案的更多信息,请参阅此 Curity Code Example。如果您使用的是网站技术堆栈,则不会使用 API 但同样的 cookie 原则将适用。