6

我有任何有趣的问题让我完全难过。

我构建了一段生产代码,它读取由另一个部门管理的机器设置的 IBM LTPA 令牌 cookie,对其进行验证,并使用它登录到我的组管理的系统(通过设置一些特殊的 cookie)。这种单点登录过程对最终用户完全透明,并且在所有浏览器的生产环境中已经运行了好几年。

最近,我注意到它在我的 IE8 开发机器上无法正常工作。我最近从 Vista 升级到了 Windows 7。我不确定这在升级之前或之后是否在我的机器上不起作用,因为它已经工作了很长时间,我没有理由对其进行定期测试。同一台机器上的 FireFox 3.5 和 Chrome 4 dev 都按预期工作。这台机器上的 XP SP3 虚拟机上的 IE6 工作正常。家里多台机器上的 IE8 工作正常(Windows Server 2008 和 Windows 7)。

出于诊断目的,我从我的开发 IE8(WinInet 缓存)中清除了所有缓存的数据,以从头开始。我启动了 Fiddler 来跟踪这个过程并确定什么不起作用。我发现的东西很有趣,我无法解释。

在初始站点登录后——我们称之为 ltpa.domain.com,会话 cookie 按预期从服务器下推,带有 Set-Cookie 标头。我验证域是否正确设置为 .domain.com 并且路径是 /。登录后来自浏览器的所有后续请求都按预期将所有 cookie 与每个请求一起推送回服务器。事实上,这是一个门户网站,并且还有一些来自portal.domain.com 的附加内容也被检索;所有 cookie 也会正确传递到该服务器。

现在来看有趣的一点——当我向 myserver.domain.com 发出请求时——由 ltpa.domain.com 设置的域级别 cookie 不会被推送到 myserver.domain.com,即使它们应该是。 如果 cookie 丢失,单点登录进程会自动重定向回 l​​tpa.domain.com(并将 cookie 推送到 ltpa 登录进程用来重定向的客户端)—— myserver 设置的域级别 cookie 没有被推送备份到 ltpa.domain.com。

同样,这只发生在我知道的我的开发机器上的这个 IE8 实例上。这个过程每天使用数千次,拥有相当大的用户群,我们没有收到来自最终用户的其他投诉——因此没有迹象表明这是 IE8 或类似问题的系统性问题。

在我看来,这种行为将 myserver.domain.com 和 ltpa.domain.com 视为单独的域,即使它们不是。

有两点可能值得一提——但可能是红鲱鱼,因为它一直都是这样,从来没有引起过问题。

  • DNS在这里有点时髦。LTPA.domain.com 解析为外部 IP。但是,myserver.domain.com 解析为内部 IP。对该 IP 进行反向查找会给出内部 dns 名称——比如说 myserver.internal.domain.com。我推测,也许 IE8 正在执行某种反向查找以防止基于 DNS 的攻击——所以我修改了我的 HOSTS 文件并将 myserver.domain.com 指向外部 IP 以进行测试。我在 Fiddler 中验证了请求将发送到外部 IP - 但它与 cookie 没有区别。他们仍然没有通过。

  • 以前,myserver.domain.com 位于 IE WinInet 安全配置页面中的“受信任的站点”下。我删除了它和那里的另一个站点。我们称这台机器为 my2.domain.com;这台机器巧合(或者可能不是?)也没有通过 ltpa.domain.com 设置的域 cookie。在这种情况下,我不需要传递 cookie,但我还是测试了它,看看这个问题是否影响了其他机器。在 IE 状态栏中,ltpa.domain.com、portal.domain.com 和 myserver.domain.com 都显示在“Internet”区域下。奇怪的是 my2.domain.com 仍然在状态栏中显示“受信任的站点”,即使它没有在对话框中列出?是的,我在进行更改后重新启动。

其他注意事项。

  • 我知道 IE 和非 .com 域、引用的 cookie 值和其他 cookie 异常的其他问题——这里在 stackoverflow 和 Internet 上的其他地方提到。这些都不适用。我已经阅读了 Eric Law 关于 cookie 内部的 IEInternals 文章——http: //blogs.msdn.com/ieinternals/archive/2009/08/20/WinINET-IE-Cookie-Internals-FAQ.aspx

  • IE 中没有启用时髦的插件。只需 Flash、Silverlight、Live ID 登录助手和 Fiddler2。

  • 没有用于过滤特定于我的域的内容的 InPrivate 规则。

  • 由于我使用的是笔记本电脑,因此我尝试了家庭网络中的 IE8(重新启动后)以排除 DNS 问题。我在家里遇到了同样的行为,所以据我所知,时髦的 DNS 不是问题。

  • 我已经多次浏览了所有的 IE 设置,以为我可能错过了一个不起眼的 cookie 设置。隐私设置为“中”,没有特殊处理的网站。

  • 使用开发工具,我确保未选中“始终从服务器刷新”。

  • 我不认为这是我可以向 Microsoft 报告的任何事情,因为我无法在其他任何地方重现该问题。

所以在这一点上,我不知所措。没有在 IE8 中打开某种我不知道的诊断模式,或者没有对其进行调试的代码......我已经没有好主意了。

我在想我遇到了错误,某些注册表设置或类似设置已被调整,或者某处已损坏。

有任何想法吗?

4

2 回答 2

3

我想我已经在这里找到了这个问题。

这必须是IE中的一个错误。好吧,如果我们要分裂头发,实际上是两个。

尽管我很早就从 IE 安全对话框的受信任站点站点列表中删除了 myserver.domain.com 和 my2.domain.com,但这些站点都保留在注册表中的区域配置中!我能够通过在注册表中搜索我的服务器名称来解决这个问题,瞧,一项小小的侦探工作被证明是卓有成效的。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains 下有一个子项

对于 domain.com

在 domain.com 下,我从“受信任的站点”列表对话框中删除了两个不同服务器的两个子项——两者的 REG_DWORD 值 * 设置为 2。这当然意味着,将站点放入受信任的站点。

我能够从 'Scripting Guy' 中找到一篇旧文章,讨论这个特定的键和可用于更改区域的值。 http://blogs.technet.com/heyscriptingguy/archive/2005/05/02/how-can-i-add-a-site-to-internet-explorer-s-restricted-sites-zone.aspx

也许这些设置在 UI 中以某种方式被弃用,但仍被读取/使用?我不知道,但显然 UI 中显示的内容与实际使用的内容不匹配。

此外,正如之前的评论中提到的,当点击 myserver.domain.com 的根目录时(这导致服务器 btw 的 403),状态栏显示“Internet | 保护模式:关闭”只会增加混乱,因为它应该读作“受信任的站点 | 保护模式:关闭'。

所以解决方案最终是

a - 删除上面指定的 reg 键,以便将所有内容移至 Internet 区域或 b - 将 *.domain.com 添加到受信任站点列表中,以便将所有内容移至 Internet 区域

希望您可以将这些问题提交给 IE 团队 Eric?

感谢您让我指出正确的方向!

于 2009-11-11T21:07:20.580 回答
1

你需要非常小心“域”这个词,因为很多人用它来表示许多不同的东西。

http://blogs.msdn.com/ieinternals/archive/2009/09/19/Private-Domain-Names-and-Public-Suffixes-in-Internet-Explorer.aspx

从描述来看,这听起来很像您在这篇文章中描述的“登录 Cookie 故障排除”部分中遇到了问题 #3:http: //blogs.msdn.com/ieinternals/archive/2009/09/11/Troubleshooting -IE.aspx 中的存储登录问题

您需要解决区域/完整性级别问题才能解决 cookie 问题。

于 2009-11-11T18:56:10.407 回答