保留来自第 3 方的 Cookie API

Persist Cookie from 3rd party API

我有一个身份验证 API 可以将刷新令牌添加到仅 HTTP cookie。

                Response.Cookies.Append("myRefresfToken", refreshToken, new Microsoft.AspNetCore.Http.CookieOptions
                {
                    SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None,
                    Expires = DateTime.UtcNow.AddDays(1),
                    HttpOnly = true,
                    Secure = false,
                    Domain = null,
                    Path = "/oauth/v2.0/Authorization/"
                });

当我的站点从令牌端点获得响应时,set-cookie header 就在那里。但是,当我使用开发工具查看站点时,我看不到正在设置的 cookie。此外,当请求返回到 auth API 时,刷新令牌 cookie 不存在。

如何设置来自另一个 api 的 cookie,以便我的客户存储它?

谢谢,
特拉维斯

避免第三方 Cookie

如果您使用 SameSite=none cookie,您还需要设置 Secure=true 并使用基于 SSL 的设置。一般来说,尽管我建议不要构建任何使用 third party cookies 的新解决方案,现代浏览器会积极放弃这些解决方案,并且预计这只会变得更严格。

第一方 Cookie 的设计

要让 API 发布可由基于浏览器的应用程序可靠使用的 cookie,这些天有托管先决条件。瞄准所有云提供商都支持的这种类型的设置。然后 Cookie 共享相同的父域,不会被删除,然后您还可以使用最安全的 SameSite=strict cookie:

开发人员测试

在开发计算机上,您可以通过编辑主机文件来模拟此操作:

127.0.0.1 www.example.com api.example.com
:1        localhost

然后您可以更新应用程序以使用这些 URL。请注意,不同的端口仍然算作 Same Site,并且通过严格设置,您可以使用 HTTP URL 进行本地开发。查看这是否解决了您的直接问题,然后设计您的生产部署:

现代网络架构

出于兴趣,上述概念是我们在 Curity 推荐的最佳单页应用程序架构的一部分,其中 SPA 可以部署到内容交付网络并使用 API 发布的安全 cookie .如果有兴趣,请参阅有关此主题的 Curity resources