gpt4 book ai didi

iis - IE/IIS集成认证问题

转载 作者:行者123 更新时间:2023-12-04 16:56:58 24 4
gpt4 key购买 nike

在 IIS 中,我有:

http://myserver/myapplication
http://myserver/reports



报告应用程序实际上是使用 Windows 身份验证的报告服务。 myapplication 是一个使用表单例份验证的 asp.net 应用程序。

服务器在公司域之外。如果我首先访问报告并在提示时输入用户和密码(在服务器上创建的本地凭据),我可以访问报告页面,没有问题。如果然后我直接进入我的应用程序的登录页面并尝试登录,登录页面会刷新而不做任何事情。这总是在 IE 6 中发生。在 IE 7 中它会间歇性地发生。在 Firefox 中或 Fiddler 在后台运行时不会发生,这似乎可以即时解决问题。

我使用wireshark查看发生了什么,发现IE 6将从reports app获取的windows身份验证 token 发送到myapp。这是 IE 和 Firefox 之间的唯一区别。 IIS 似乎吓坏了,只是将我对登录页面的 POST 解释为 GET 并返回。

如果我在 IIS 中将 Windows 身份验证添加到 myapplication 中,那么任何浏览器似乎都可以正常工作。

为什么会这样? IE 中的错误还是我遗漏了什么?

最佳答案

这是 IE 中的一个错误,也是一个基于 HTTP 的 NTLM/Negotiate(又名集成)身份验证设计中的错误。

NTLM/Negotiate 是面向连接的身份验证协议(protocol),HTTP 并不是真正设计的。因此,当您在服务器上的一个页面需要这种身份验证机制时,IE 通常会假定服务器上的其他页面具有相同的要求。

此外,出于性能和安全原因,如果 IE 期望给定 POST 请求的 Negotiate/NTLM 质询,那么它将首先发送一个 0 字节的 POST,期望服务器返回一个 HTTP/401 质询,它将对其进行身份验证,然后正确发送 POST 正文。

但是,在您的情况下,不需要集成身份验证的文件夹获取 0 字节 POST 并说“Hrm,奇怪,一个 0 字节的帖子。好的,HTTP/200,这里的页面就像您使用 GET 一样。”

因为 IE 永远不会收到它所期望的 401 质询,所以它实际上永远不会发送 POST 正文。

(由于 HTTP 连接重用的工作原理,Fiddler 可能会让您有些困惑)。

解决方法是确保如果您在主机上使用集成身份验证,请在任何地方使用它。

关于iis - IE/IIS集成认证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1547661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com