Cookies 未在iframe中设置Cookie

Cookies 未在iframe中设置Cookie,cookies,iframe,asp.net-core,identityserver4,c3.js,Cookies,Iframe,Asp.net Core,Identityserver4,C3.js,我在一台服务器上有一个Identity Server(v4),在另一个服务器和域上有一个web应用程序。我只需要windows身份验证,重定向后一切正常。但是,我注意到,如果cookie尚未过期,则静默登录可以工作 如果cookie已过期,则当前需要重定向,该重定向可以正常工作。然而,不幸的是,这意味着如果用户没有在当前屏幕上保存数据,除非我实现缓存机制,否则他们将丢失这些数据。相反,我想设置一个隐藏的iframe,它只导航到Identity Server,如果用户在公司基础设施内(他们总是在公

我在一台服务器上有一个Identity Server(v4),在另一个服务器和域上有一个web应用程序。我只需要windows身份验证,重定向后一切正常。但是,我注意到,如果cookie尚未过期,则静默登录可以工作

如果cookie已过期,则当前需要重定向,该重定向可以正常工作。然而,不幸的是,这意味着如果用户没有在当前屏幕上保存数据,除非我实现缓存机制,否则他们将丢失这些数据。相反,我想设置一个隐藏的iframe,它只导航到Identity Server,如果用户在公司基础设施内(他们总是在公司基础设施内),则自动登录

经过数小时的调试,我发现虽然cookie是从iFrame正确发送的,但设置的任何cookie似乎都不起作用-它们在chrome调试器中作为响应cookie,但在下一次重定向时不会作为请求cookie发送,我不知道为什么

答复如下:

Cookie选项:SameSite-Lax、HTTP-true、Secure-true、Path/

标题:

内容安全策略:默认src“self”;对象src'none';帧src localhost:44388;框住祖先的自我 ; 沙盒允许表单允许相同的来源 允许脚本;基uri“self”

持久身份验证:true

Pragma:无缓存

推荐人政策:无推荐人

WWW-Authenticate:协商或协商=

X-Content-Security-Policy:默认src'self';对象src'none';框架型钢骨混凝土 **本地主机:44388;框住祖先的“自我”;沙盒允许表单允许相同来源的允许脚本;基uri“self”

X-Content-Type-Options:nosniff

X-Frame-Options:允许从

为了解决一个类似的问题——来自不同主机名的iframe中经过身份验证的站点——我删除了我设置的SameSite属性


实际上,SameSite有三个选项,从最严格到最不严格:严格、宽松和“根本不设置”。

当我的父网站是localhost而框架不是localhost时,我看到了同样的行为。奇怪的是,当父对象和帧都不是本地主机时,cookie工作正常,即使它们也不是同一个域。我对cookie使用了相同的site“None”设置,多条评论建议使用该设置来解决这个问题。它似乎应该适用于Strict或Lax,因为我所做的ajax查询来自框架内,从技术上讲,框架是同一个站点,但出于某种原因,为框架的父级设置不同的域会使其失效(尽管只有在父级为localhost时)。

从2020年8月开始,必须将SameSite设置为None,并确保为真

在php中,可以通过以下方式完成:

setcookie(“变量”,1,time()+(86400),“/;SameSite=None;Secure

在javascript中,路径选项之后将类似。 document.cookie=“cookiename=“+0+”;Domain=.yourdomain.net;path=/;SameSite=None;Secure“

我发现了-将SameSite设置为“None”-以及关于这意味着什么的更多信息

这些都来自PHP手册,但这里的其他答案帮助我找到了解决方案


显然,浏览器不再允许您在iframe中设置任何您想要的内容,我尝试在一个iframe中处理一个会话,加载到另一个域上,同时,我注意到正在为另一个域创建一个不同的会话,而不是我在iframe中加载的会话。这似乎已经解决了它。我仍在测试,但这是我今早开始寻找修复程序后第一件有效的事情。

尝试设置options.Cookie.SameSite=SameSiteMode.None;现在支持值“None”,尽管它要求您同时运行“secure”(https)。现在有了IETF规范。另请参见强制设置安全标志!(仅仅使用HTTPS是不够的)嗨,我想知道为什么从2020年8月开始?此时会发生什么?