我在一台服务器上有一个身份服务器(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/
答案 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 中加载的域。这似乎已经解决了。我仍在测试中,但这是我今天早上开始寻找修复程序以来第一件奏效的事情。