从根本上讲,这是一个OAuth2 / OIDC(IdentityServer4)问题,当用户的浏览器加载身份服务(站点A)页面并将FORM POST authorization code
和id_token
回到依赖方站点(站点B)时发生。
依赖方站点(站点B)接收到FORM POST请求,但之前没有在用户浏览器中放置站点B的cookie,这使验证过程失败。
我尝试设置ALLOW-CROSS-ORIGIN-ACCESS标头,但它似乎对FORM POST方案(不是ajax调用)没有帮助。
在OAuth2 / OIDC集成的通用应用程序中,我是否不希望将Cookie与authorization code
和id_token
一起发布回依赖部件站点(站点B)?或更笼统地描述它,当从站点A到站点B进行表单发布时,我是否应该指望站点B的任何cookie都不属于站点B的请求?
答案 0 :(得分:1)
这不是CORS,这是另一个问题,很可能与Same Site Cookie政策有关。那是特定于浏览器的。
当站点B是ASP.NET核心时,您可以设置:
services.ConfigureApplicationCookie(opts=>{opts.Cookie.SameSite = SameSiteMode.None;});
//and
app.UseCookiePolicy(new CookiePolicyOptions{MinimumSameSitePolicy = SameSiteMode.None});
(请参阅详细讨论on ASP.NET Core github)
或通过将其他站点切换到Identity Server作者提供的相同站点 POST来使用更智能,更安全的trick。