我有一个运行在IIS 7.5中的站点,可以使用与实际服务器名称不同的DNS别名访问该站点。在IE 8中,集成身份验证失败,但是在Firefox和Chrome中,一切正常。 (IE会多次提出凭据挑战,然后显示401.1错误页面。)
我发现这是由于IE在NTLM上使用Kerberos(又称“协商”)引起的,并且Kerberos要求注册服务主体名称(使用SETSPN),以便DNS名称和服务器名称之间的不匹配得到正确处理。
但是,我的网站不需要模拟-仅需委派即可。因此,我不想将SetSPN弄乱,而只是想从IIS中的WindowsAuthentication方法列表中删除“Negotiate”。
我已经搜索了很长时间,以了解如何在IIS中执行此操作。我玩过许多appcmd
命令-但我只是找不到在线示例,也无法通过阅读MSDN文档或使用appcmd /?
来使appcmd
命令仅适用于站点内的特定应用程序,而不适用于整个Web服务器。在两天后的几个小时的搜索中,至少访问了3十二个网页,但我仍然无果而终。
我该如何做这件事-似乎应该这么简单!
最佳答案
在IIS中打开配置编辑器。它随IIS 7.5一起提供,或者您可以下载IIS 7.0的IIS administration pack。导航到要影响的范围(服务器,站点或应用程序),然后打开图标:
。
将Section更改为system.webServer/security/authentication/windowsAuthentication
:
单击providers
项,然后单击右侧的Edit Items
。选择“协商”项,然后单击“删除”:
关闭对话框,然后在右侧Apply
Pane 中单击Actions
。
您的问题已解决!不再需要Kerberos/协商!
注意:您也可以在操作 Pane 中单击Generate Script
,以显示将通过C#,javascript或从命令行使用appcmd进行更改的代码。
供引用,这是不使用配置编辑器即可完成工作的appcmd
语句。
appcmd.exe set config "Virtual/path/to/application" -section:system.webServer/security/authentication/windowsAuthentication /-"providers.[value='Negotiate']" /commit:apphost
关于iis-7 - 从IIS中的WindowsAuthentication中删除NEGOTIATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16222946/