AuthenticationType协商与NTLM

时间:2011-01-10 13:52:05

标签: asp.net iis

我在同一台服务器(IIS 7.5)上托管的2个不同站点上使用相同的代码库。

出于某种原因,当我检查http处理程序后面的代码上的Identity.AuthenticationType属性时,我看到1个站点的NTLM和另一个站点的协商。这导致了一些问题,我需要它们都使用NTLM。

你可以帮我弄清楚为什么会有这种差异吗?到目前为止,我看到两个IIS站点都以相同的方式配置,但当然至少有一个我无法检测到的差异。 谢谢!

修改
我使用this链接提供了从IIS中删除“协商”提供程序的说明。它对我不起作用。我执行了

appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/windowsAuthentication /-"providers.[value='Negotiate']" /commit:apphost

也许我做错了什么,但没有用。我仍然将“Negotiate”视为AuthenticationType

我遇到的问题是我正在设置web.config模拟凭据,但它没有使用它们。它不使用我提供的凭据,而是使用匿名用户。

奇怪的是,WindowsAuthentication已被禁用。我认为“Negotiate”仅被windowsAuthentication使用。

4 个答案:

答案 0 :(得分:2)

Negotiate将在内部选择Ntlm或Kerberos身份验证。 如果网站说Ntlm只选择Ntlm身份验证。 请检查网站并进行身份验证。

答案 1 :(得分:1)

需要启用Windows身份验证并禁用匿名身份验证以获取登录用户(我假设您正在对域进行身份验证,如果用户不这样做,则不希望回退到匿名用户使用Windows身份验证获得授权凭证。

在IIS7.5中,要查看正在使用的提供程序,请单击“身份验证”,右键单击“Windows身份验证”并选择提供程序。您将拥有已启用的提供商列表,订单很重要。尝试确保它们都是相同的(在您的情况下,在列表顶部有NTLM)。

对于迟到的回复感到抱歉!

答案 2 :(得分:0)

首先要检查的是,为每个站点启用的身份验证类型之间是否存在差异。

默认情况下,仅启用匿名。

答案 3 :(得分:0)

如果您的Internet Information Server(IIS)版本是7.0,请查看<%SystemDrive%> /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问题提供了删除协商的说明,当我尝试重新启用谈判时,我发现这些说明很有帮助。