【问题标题】:Cookie not being set in iframeCookie 未在 iframe 中设置
【发布时间】:2018-12-11 13:37:21
【问题描述】:

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

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

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

回应:

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

标题:

Content-Security-Policy: default-src 'self';对象源“无”;框架源本地主机:44388;框架祖先“自我” https://localhost:44388/;沙盒允许表单允许同源 允许脚本; base-uri 'self';

持久验证:真

Pragma:无缓存

推荐人政策:无推荐人

WWW-Authenticate:协商 oRswGaADCgEAoxIEEAEAAABJ+0p/zH0aeAAAAAA=

X-Content-Security-Policy: default-src 'self';对象源“无”;帧源 **本地主机:44388;框架祖先“自我”https://localhost:44388/;沙盒允许表单允许同源允许脚本; base-uri 'self';

X-Content-Type-Options:nosniff

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

【问题讨论】:

  • 尝试设置 options.Cookie.SameSite = SameSiteMode.None;

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    从 2020 年 8 月起,您必须将 SameSite 设置为 None,并将 secure 设置为 True。

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

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

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

    【讨论】:

    • 嗨,我想知道为什么它是从 2020 年 8 月开始的?此时会发生什么?
    • 谢谢,这对我很有效!
    【解决方案3】:

    当我的父网站是 localhost 并且框架不是 localhost 时,我看到了同样的行为。奇怪的是,当父节点和框架都不是 localhost 时,cookie 可以正常工作,即使它们也不是同一个域。我对多个 cmets 推荐的 cookie 使用 SameSite“无”设置来解决此问题。似乎它应该与 Strict 或 Lax 一起使用,因为我所做的 ajax 查询来自框架内,这在技术上是同一个站点,但由于某种原因,框架的父级具有不同的域将其扔掉(虽然只有当父母是本地主机时)。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      猜你喜欢
      • 2020-12-31
      • 2011-11-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2013-10-15
      • 2014-05-16
      • 2012-09-27
      • 2021-11-03
      相关资源
      最近更新 更多