未在iframe中设置Cookie

时间:2018-07-03 09:34:02

标签: cookies iframe asp.net-core identityserver4 c3.js

我在一台服务器上有一个身份服务器(v4),另一台服务器和域上有一个Web应用程序。我只需要Windows身份验证,并且通过重定向一切正常。但是,我注意到,如果Cookie尚未过期,则可以进行静默登录。

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

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

响应时:

  

Cookie选项:SameSite Lax,HTTP true,Secure true,Path /

     

标题:

     

内容安全政策:default-src'self'; object-src'none'; frame-src本地主机:44388;框架祖先的“自我”   https://localhost:44388/;沙箱允许形式允许相同起源   允许脚本; base-uri'self';

     

持久性身份验证:是

     

编译:无缓存

     

引荐来源政策:无引荐来源

     

WWW认证:协商oRswGaADCgEAoxIEEAEAAABJ + 0p / zH0aeAAAAAA =

     

X内容安全策略:default-src'self'; object-src'none';帧源   **本地主机:44388;框架祖先的“自我” https://localhost:44388/;沙盒允许形式allow-same-origin允许脚本; base-uri'self';

     

X内容类型选项:nosniff

     

X-Frame-Options :ALLOW-FROM https://localhost:44388/

4 个答案:

答案 0 :(得分:2)

从2020年8月开始,您必须将SameSite设置为None,并将其设置为True。

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

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

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

答案 1 :(得分:1)

当我的父网站是localhost而框架不是localhost时,我也看到了相同的行为。奇怪的是,即使父级和框架都不是本地主机,即使它们也不是同一个域,cookie也可以正常工作。我对多个Cookie建议使用Cookie的SameSite“无”设置来解决此问题。似乎它应该与Strict或Lax一起使用,因为我要进行的ajax查询来自框架内,从技术上讲,它是同一站点,但是由于某种原因,框架的父级具有不同的域将其丢弃( (仅当父级为localhost时)。

答案 2 :(得分:0)

要解决类似的问题-iframe中来自其他主机名的经过身份验证的网站-我删除了设置的SameSite属性。

SameSite确实有三个选项,从最严格到最不严格:严格,不严格和“根本不设置”。

答案 3 :(得分:0)

我发现 this worked for me - 将 SameSite 设置为“无” - 以及有关 here 含义的更多信息。

全部来自 PHP 手册,但此处的其他答案帮助我找到了解决方案。

显然,浏览器不再允许你在 iframe 中设置你想要的任何东西,我试图在 iframe 中处理一个会话,加载到不同的域上,在这样做时,我注意到正在创建一个不同的会话OTHER 域而不是我在 iframe 中加载的域。这似乎已经解决了。我仍在测试中,但这是我今天早上开始寻找修复程序以来第一件奏效的事情。