从IIS中的WindowsAuthentication中删除NEGOTIATE

时间:2013-04-25 19:16:02

标签: iis-7 iis-7.5 windows-authentication kerberos

我在IIS 7.5中运行的站点使用与实际服务器名称不同的DNS别名进行访问。在IE 8中,集成身份验证失败,但在Firefox和Chrome中一切正常。 (IE会多次提出凭据质询,然后显示401.1错误页面。)

我已经发现这是因为IE使用Kerberos(又名“Negotiate”)而非NTLM,而Kerberos需要注册服务主体名称(使用SETSPN),以便DNS名称和服务器名称之间的不匹配是正确的处理。

但是,我的网站不需要冒充 - 只需要委派即可。因此,我只想从IIS中的WindowsAuthentication方法列表中删除“Negotiate”,而不是搞乱SetSPN。

我已经搜索了很长时间,以了解如何在IIS中执行此操作。我玩了很多appcmd命令 - 但是我找不到在线示例,或者通过阅读MSDN文档或使用appcmd /?来使appcmd命令仅适用于站点内的特定应用程序,而不是整个Web服务器。在两天后的几个搜索小时内,访问了至少三十多个网页,我仍然没有结果。

如何在tarnation中完成这项工作 - 看起来应该这么简单!

1 个答案:

答案 0 :(得分:12)

在IIS中打开配置编辑器。它随IIS 7.5一起提供,或者您可以为IIS 7.0下载IIS administration pack。导航到要影响的范围(服务器,站点或应用程序),然后打开图标:

IIS Configuration Editor

将章节更改为system.webServer/security/authentication/windowsAuthentication

IIS Configuration Editor - Windows Authentication

单击providers项,然后单击右侧的Edit Items。选择“Negotiate”项目并单击“Remove”:

IIS Configuration Editor - Windows Authentication - providers

关闭对话框,然后点击右侧Apply窗格中的Actions

你的问题解决了!不再有Kerberos /谈判!

注意:您还可以在操作窗格中单击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