AuthenticationType 协商与 NTLM
Posted
技术标签:
【中文标题】AuthenticationType 协商与 NTLM【英文标题】:AuthenticationType Negotiate vs NTLM 【发布时间】:2011-01-10 13:52:05 【问题描述】:我在同一服务器 (IIS 7.5) 上托管的 2 个不同站点上使用了相同的代码库。
由于某种原因,当我检查 http 处理程序背后代码的 Identity.AuthenticationType 属性时,我看到一个站点的 NTLM 和另一个站点的协商。这导致了一些问题,我需要他们两个都使用 NTLM。
您能帮我弄清楚为什么会有这种差异吗?到目前为止,我看到两个 IIS 站点的配置方式相同,但当然至少有 1 个我无法检测到的差异。 谢谢!
编辑 我使用了this 链接,该链接提供了从 IIS 中删除“协商”提供程序的说明。它对我不起作用。我执行了
appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/windowsAuthentication /-"providers.[value='Negotiate']" /commit:apphost
也许我做错了什么,但没有帮助。我仍然将“协商”视为 AuthenticationType
我遇到的问题是我正在设置 web.config 模拟凭据,但它没有使用它们。它不使用我提供的凭据,而是使用匿名用户。
奇怪的是 windowsAuthentication 被禁用了。我以为“协商”仅由 windowsAuthentication 使用。
【问题讨论】:
两个 asp.net 配置文件是否都指定了模拟?两者都在同一个安全区域吗? @Simon:两个文件都指定了模拟。不知道如何检查安全区域。 安全区域是一种 IE 事物(Internet、Intranet、受信任、不受信任)。不适用于其他浏览器。 我正在使用 Firefox 进行测试,所以它似乎不适用 :( 两个站点是否在同一个域中运行?一个站点在域中运行,而另一个站点在工作组中运行? 【参考方案1】:Negotiate 将在内部选择 Ntlm 或 Kerberos 身份验证。 如果网站说 Ntlm 只会选择 Ntlm 身份验证。 请检查这两个站点并使身份验证相同。
【讨论】:
【参考方案2】:需要启用 Windows 身份验证并禁用匿名身份验证才能获取登录用户(我在这里假设您正在域上进行身份验证,并且如果用户不希望退回到匿名用户) t 拥有使用 windows auth 的授权凭据)。
在 IIS7.5 中,要查看正在使用的提供程序,请单击身份验证,右键单击 Windows 身份验证并选择提供程序。您将有一个启用的提供者列表,顺序很重要。尝试确保它们都相同(在您的情况下,NTLM 位于列表顶部)。
抱歉回复晚了!
【讨论】:
【参考方案3】:首先要检查的是为每个站点启用的身份验证类型之间是否存在差异。
默认情况下只启用匿名。
【讨论】:
感谢您的回答。我在沮丧的道路上检查了数百次,它们是= 网站是否使用不同的应用程序池? 好的,能不能把不工作的站点配置成使用工作站点的应用程序池。如果它现在开始工作,这将与应用程序池或 web.config 相关【参考方案4】:如果您的 Internet Information Server (IIS) 版本是 7.0,请查看 /Windows/System32/inetsrv/config/ApplicationHost.config 文件中的以下部分:
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="false">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
Windows Authentication Providers 的文档可能会提供更多详细信息。
Remove NEGOTIATE from WindowsAuthentication in IIS 问题提供了删除 Negotiate 的说明,我在尝试重新启用 Negotiate 时发现这些说明很有帮助。
【讨论】:
以上是关于AuthenticationType 协商与 NTLM的主要内容,如果未能解决你的问题,请参考以下文章