我在同一台服务器(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使用。
答案 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问题提供了删除协商的说明,当我尝试重新启用谈判时,我发现这些说明很有帮助。