0

我有两个 ASP.NET 网站:new.somecompany.com 和 legacy.somecompany.com。

“新建”是使用 Windows 身份验证的 Intranet 应用程序。“遗留”既是互联网又是内联网;它使用表单身份验证。

在“新”网站中,我的老板希望能够单击链接并打开浏览器窗口,以访问“旧”网站上已登录的网页。(他希望在不更改旧站点的情况下完成此操作。)

我有一个适用于 Chrome(版本 39.0.2171.95 m)和 Firefox(版本 33.1.1)的解决方案,但不适用于 Internet Explorer(版本 11.0.9600.17501)。在高层次上,解决方案是:

  1. “新”上的控制器使用 HttpWebRequest 使用存储的凭据登录“旧版”。
  2. 控制器从“legacy”响应中获取“ASP.Net_SessionId”cookie,并使用它在浏览器中为域“.somecompany.com”设置“ASP.Net_SessionId”cookie。
  3. 在浏览器中,转到https://legacy.somecompany.com/somepage.aspx

对于 Chrome 和 Firefox,将https://legacy.somecompany.com/somepage.aspx根据用于登录的存储凭据显示。在 IE 11 中,会显示登录页面。

我使用 Microsoft 的消息分析器工具来查看来回传递的内容。使用 Chrome,我看到在 somepage.aspx 的 HTTP 请求中发送了 ASP.Net_SessionId cookie。使用 IE 11,cookie 不会被发送,我会重定向到登录页面作为响应。

我可以做些什么来让它在 IE 11 中工作?

4

2 回答 2

0

我也有类似的情况。最近,我开发了一个 Web 应用程序,我想在 Windows Authenticate and Anonymous 站点中编写一次代码并部署(在 iFrame 中)。

用户必须通过 Active Director 登录或登录到外部站点。

我就是这样处理的。在这两种情况下,iFrame 站点都在同一个域上运行(如您所示)site1.company.com 或 site2.company.com

我就是这样处理的。

  1. 站点 A:用户登录,加密用户名并将其存储在 cookie 中。(我使用带有私钥的 AES 加密)。

  2. 站点 B:读取 cookie,解密用户 ID,并将用户登录到站点。

cookie 中还有一个加密值(日期时间),该值被检查 3 秒过期。

于 2015-01-13T21:17:51.950 回答
0

这个博客给了我答案。特别是,本段:

问题 #3 出现在 Windows Vista 及更高版本上,当您将一个子域配置为在保护模式之外运行(例如,将其放在受信任区域中)和另一个相关的子域在保护模式内运行(例如,将其留在 Internet 区域中) . 这不是很常见,但如果您将 login.live.com 放入受信任区域但未将 mail.live.com 放入受信任区域,则可能会发生这种情况。这个模糊问题的根本原因是保护模式和非保护模式不共享 cookie,因此保护模式之外的站点设置的 cookie 对于在保护模式内运行的站点将不可见,反之亦然。

在我的例子中,“new.somecompany.com”在 IE 设置的本地 Intranet 区域中,但“legacy.somecompany.com”不在。将“legacy.somecompany.com”添加到 Intranet 区域后,我的代码在 IE 11 中运行。

于 2015-01-13T23:08:49.950 回答