使用IE11跨子域的ASP.Net_SessionId cookie

时间:2015-01-13 20:59:12

标签: asp.net internet-explorer cookies asp.net-session

我有两个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. “new”上的控制器使用HttpWebRequest使用存储的凭据登录“legacy”。
  2. 控制器从“遗留”响应中获取“ASP.Net_SessionId”cookie并将其用于 在浏览器中为域名“.somecompany.com”设置“ASP.Net_SessionId”cookie。
  3. 在浏览器中,转到https://legacy.somecompany.com/somepage.aspx
  4. 使用Chrome和Firefox时,https://legacy.somecompany.com/somepage.aspx会根据用于登录的存储凭据显示。使用IE 11,将显示登录页面。

    我使用Microsoft的Message Analyzer工具来查看正在传递的内容。使用Chrome,我看到在somepage.aspx的HTTP请求中发送了ASP.Net_SessionId cookie。使用IE 11,cookie没有被发送,我得到一个重定向到登录页面作为响应。

    我有什么办法可以让它在IE 11中运行吗?

2 个答案:

答案 0 :(得分:0)

我有类似的情况。最近我开发了一个Web应用程序,我希望在Windows Authenticate和Anonymous站点中进行一次代码编译并部署(在iFrame中)。

用户必须由Active Director登录或登录外部站点。

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

这就是我处理它的方式。

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

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

  3. cookie中还有一个加密值(日期时间),并且该值将在3秒到期时检查。

答案 1 :(得分:0)

blog给了我答案。特别是这一段:

  

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

就我而言," new.somecompany.com"在IE的设置中位于本地Intranet区域,但是" legacy.somecompany.com"不是。添加" legacy.somecompany.com"到了Intranet区域,我的代码在IE 11中工作。