6

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

我发现这是由于 IE 在 NTLM 上使用 Kerberos(又名“协商”),而 Kerberos 需要注册服务主体名称(使用 SETSPN),以便正确处理 DNS 名称和服务器名称之间的不匹配。

然而,我的网站不需要模拟——拥有授权就足够了。因此,我不想弄乱 SetSPN,而是想从 IIS 中的 WindowsAuthentication 方法列表中删除“协商”。

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

我是如何完成这项工作的——看起来应该很容易!

4

1 回答 1

13

在 IIS 中打开配置编辑器。它带有 IIS 7.5,或者您可以下载 IIS 7.0 的IIS 管理包。导航到要影响的范围(服务器、站点或应用程序),然后打开图标:

IIS 配置编辑器.

将部分更改为system.webServer/security/authentication/windowsAuthentication

IIS 配置编辑器 - Windows 身份验证

单击该providers项目,然后单击Edit Items右侧。选择“协商”项,然后单击“删除”:

IIS 配置编辑器 - Windows 身份验证 - 提供程序

关闭对话框并单击右侧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
于 2013-04-25T19:16:02.410 回答