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的主要内容,如果未能解决你的问题,请参考以下文章

强缓存与协商缓存

第111天:强缓存与协商缓存

客户何时适合与 SignalR 服务重新协商?

基于Nginx设置浏览器协商缓存过程详解

区块链与密码学第11-03讲:密钥分配与协商

区块链与密码学第11-03讲:密钥分配与协商