最奇怪的IIS Windows身份验证行为

use*_*895 21 iis windows-authentication

我使用Windows身份验证在企业网络中的Windows Server R2上运行ASP.NET网站.

  • 该网站的应用程序池使用域帐户并处于集成管道模式.
  • 身份验证设置为Windows身份验证,禁用所有其他身份验证模式.

但是,这不起作用.每次我访问网站时,都会弹出一个询问用户名和密码的对话框.我输入正确的域用户名和密码,但它不会继续 - 窗口再次弹出.三次后,它会失败并显示一个白页.我试过很多不同的浏览器,但都失败了.我让一些同事尝试,他们都失败了.

我无法弄清楚为什么会发生这种错误,并尝试了许多方法来解决它,没有运气.我觉得这很奇怪.然而,最后我找到了解决这个问题的方法,这是问题最奇怪的部分:我在网站的"基本设置"中编辑"物理路径",我只是将它指向另一个健康的网站,例如, %SystemDrive%\ inetpub\wwwroot,然后我尝试浏览网站,非常好,它运行良好并显示默认页面(iisstart.htm).它看起来不是很有帮助,但后来我改变了物理路径回到我的网站; 突然一切顺利 - Windows身份验证工作!我不知道为什么它会有所帮助,但我对这个结果很满意 - 它解决了我的问题,虽然我不知道到底发生了什么.

快乐时间总是很短,几天后,服务器得到一些补丁并重新启动,网站无法再次运行.再次,我可以使用上面的技巧解决问题.

我不喜欢这个!每次IIS重置或服务器重启时,我都不喜欢做这个愚蠢的技巧.

是否有人对Windows身份验证失败的原因有一些想法,为什么上述技巧可以修复它,以及为什么在IIS重置后它再次失败?

Ste*_*ink 12

首先,感谢您创建此帖子.我有完全相同的问题,如果没有发布对我无效的明显修复,就找不到其他人.我这两年来一直在研究这个问题

为了帮助遇到这个问题和发布的下一个可怜的灵魂,我希望我的额外花絮有所帮助.

您的初始解决方案并没有解决我的问题,但确实证明它是与自定义错误页面相关的.将代码粘贴到web.config后我的问题变得更糟,我无法调试或启动页面(有500个与web.config相关的内部服务器错误)

但最后我做的是进入IIS控制台并删除所有自定义错误页面.它仍然没有像希望的那样工作.但是,我还在站点控制台的上半部分找到了ASP.NET ".NET自定义错误"的条目(以及web.config中的"自定义错误"标记).我在那里有旧条目并通过控制台删除它们,而YESSSS,我的网站通过Windows身份验证恢复正常.

我已经重新创建了IIS自定义错误,我仍然按照设计运行.

对于可能存在此问题的任何其他人,请检查ASP.NET自定义错误 IIS自定义错误设置.也许有冲突,我不知道,但在我的情况下,只有IIS页面设置固定我(现在:-))


use*_*895 6

我刚刚发现它似乎是由"错误页面"下的客户401错误页面引起的.我将其设置为在我的web.config中状态代码为401时执行URL,它看起来像:

 <httpErrors errorMode="Custom">
 <remove statusCode="401" subStatusCode="-1"/>
    <error statusCode="401" path="/Error/AccessDenied" responseMode="ExecuteURL"/>
 </httpErrors>
Run Code Online (Sandbox Code Playgroud)

然后每次我重置IIS并尝试访问此网站时,就会出现问题.如果我在Web.Config中删除它或从IIS控制台删除,那么问题就会消失,更有趣的是另一个实验:删除此设置并成功打开网站后,我添加了此设置.一切都很好.每个域用户都可以访问此网站,未通过授权的用户可以访问该客户错误页面.

所以我现在的解决方案是在Web.Config中删除此设置,每次重置IIS或重新启动服务器时,服务器管理员需要首先访问网站,然后在IIS控制台中添加此客户错误页面.

我觉得这是Windows Server 2008 R2上的II7.5的错误.


小智 6

我整天都在努力解决这个问题.我在web.config中使用Windows身份验证和自定义错误设置401错误.重置IIS后,网站停止接受域用户,并且一次又一次地重新出现Windows身份验证弹出窗口.

我在带有子状态代码的web.config文件中添加了删除标记.

<httpErrors>
          <remove statusCode="401" subStatusCode="-1" />
          <remove statusCode="401" subStatusCode="1" />
            <error statusCode="401" subStatusCode="-1" path="/Custom401.aspx" responseMode="ExecuteURL" />          
            <error statusCode="401" subStatusCode="1" path="/Custom401_1.aspx" responseMode="ExecuteURL" />
        </httpErrors>
Run Code Online (Sandbox Code Playgroud)

以前删除标记仅存在于子状态代码-1但缺少子状态代码"1".在我添加它之后,一切都开始正常了.

在上面的帖子中,错误标记缺少substatus代码,这可能是问题的原因.应该删除所有401错误的标记.