【发布时间】:2014-12-09 15:51:27
【问题描述】:
我在多域 Web 应用程序中遇到了 iframe 和 cookie 问题。
就在我开始之前,我很清楚 domain1 上的 application1 无法访问或设置 domain2 上 application2 的 cookie。所以这不是初学者的问题。
问题如下:
我有 website1,位于
https://test.xyz-abc.ch/FM_xyz/w8/index.html
和一个报告服务器(website2),位于 https://www8.company-asp.ch/ReportServer
问题的缩小版是这样的:
我把这个内容放了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test Page</title>
</head>
<body>
<iframe src="www8.company-asp.ch/ReportServer/login.aspx" width="1000" height="1000" ></iframe>
</body>
</html>
使用 URL
https://test.xyz-abc.ch/FM_xyz/w8/ifrm.html 进入文件“ifrm.html”
现在,无论我在报表服务器表单上输入的用户名/密码是什么,它都不起作用(用户名和密码 120% 正确,并且存在并拥有所有必要的权限)。
如果我在 Google Chrome 或 Firefox 上做同样的事情,那么它可以工作,我可以登录 iframe 中包含的报告应用程序。
但在 Internet Explorer 中,您可以(尝试)登录,但始终停留在登录屏幕,因为未知原因,它要么不创建 cookie,要么不发送 cookie。
如果我在 iframe 之外运行报告服务器,我可以登录并在 Internet Exploder 中打开报告。
请注意,ReportServer 在表单身份验证(使用 cookie)上运行,而不是 Windows 身份验证。
另外,问题不是特定于 ReportServer,我可以将任何使用 cookie 进行身份验证的应用程序放在那里,它们也会失败 - 但仅在 Internet Exploder 中,Chrome 和 Firefox 中一切正常。
我觉得这很奇怪,因为 - 如果我在
https://www6.company-asp.ch/FM_xyz/w8/index.html
上运行相同的应用程序 (site1)
并在同一域上拥有报告服务器
https://www8.company-asp.ch/ReportServer
,然后它工作。
有人知道问题是什么或可能是什么(我的意思是除了 IE 是一个 sh*t 软件的事实)?
我唯一能想到的工作变体和非工作变体之间的区别是主域(两个示例中的子域不同)是不同的。
这是 IE 中的(设计使然)SSL 问题(= 严重错误?),或者这可能是 SSL/SSL-Certificate 配置错误的问题?
编辑:
是的,我知道我可以像 <see below> 那样禁用它,但这不是一个可接受的解决方案。我不能告诉客户告诉他的所有员工在他们的 IE 中更改此设置。首先,这永远行不通,其次,他们可能无权更改这些设置,第三,无论出于何种原因,IT 部门可能不允许这样做,第四,因为要求客户更改浏览器的设置是愚蠢的。 .
编辑 2:
情况变得更糟。它是 P3P,我通过 web.config 使用 P3P 标头在我的测试域上工作。
但是不能在 ReportServer 的 web.config 中添加 P3P 头,因为它运行在某种内部 IIS6 上。
【问题讨论】:
-
嗯,可能是 p3p stackoverflow.com/questions/389456/…
标签: internet-explorer iframe ssl cookies forms-authentication