这基本上是一个OAuth2/OIDC (IdentityServer4)问题,当用户的浏览器加载身份服务(站点A)页面时,FORM POSTauthorization code
并id_token
回信赖方站点(站点B)。
信赖方站点(站点 B)接收 FORM POST 请求,但它没有之前放置在用户浏览器上的站点 B 的 Cookie,这使得验证过程失败。
我尝试设置允许跨源访问标头,但它似乎对表单发布场景(不是 ajax 调用)没有帮助。
在OAuth2/OIDC集成的常见应用程序中,我不应该期望cookie与authorization code
和id_token
一起回发到依赖部分站点(站点B)吗?或者更常见的描述是,当从站点 A 到站点 B 的表单发布时,我不应该期望站点 B 的任何 cookie 将成为站点 B 请求的一部分吗?
这不是 CORS,这是另一个问题,很可能与同一站点 cookie 策略有关。这是非常特定于浏览器的。
当站点 B ASP.NET 核心时,您可以设置:
services.ConfigureApplicationCookie(opts=>{opts.Cookie.SameSite = SameSiteMode.None;});
//and
app.UseCookiePolicy(new CookiePolicyOptions{MinimumSameSitePolicy = SameSiteMode.None});
(请参阅 ASP.NET 核心 github 上的较长讨论)
或者使用由身份服务器作者提供的更智能、更安全的技巧将其他站点切换到同一站点POST。