IE/IIS集成了身份验证问题

Cos*_*nea 5 iis internet-explorer forms-authentication windows-authentication

在IIS我有:

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

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

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

我使用wireshark查看发生了什么,发现IE 6将从报告应用程序获取的Windows身份验证令牌发送到myapp.这是IE和Firefox之间的唯一区别.IIS似乎吓坏了,只是将我的POST解释为登录页面作为GET并返回.

如果我在IIS中为myapplication添加Windows身份验证,那么任何浏览器似乎都能正常工作.

为什么会这样?IE中的错误或我错过了什么?

Eri*_*Law 13

它有点像IE中的一个错误,并且是通过HTTP设计NTLM/Negotiate(又称集成)认证的一个错误.

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

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

但是,在您的情况下,不需要集成auth的文件夹获得0字节POST并说"Hrm,很奇怪,一个0字节的帖子.好的,HTTP/200,这里的页面好像你使用了GET一样."

因为IE永远不会得到它所期望的401挑战,所以它实际上从未发送过POST主体.

(由于HTTP连接重用的工作方式,Fiddler可能会让您感到困惑).

解决方法是确保如果您在主机上使用Integrated auth,请在任何地方使用它.