2011-01-10 65 views
4

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

出于某种原因,当我检查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 

也许我做错了什么,但它没有帮助。我仍然看到“协商”身份验证类型

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

而有些奇怪的是windowsAuthentication被禁用。我认为“谈判”只被windowsAuthentication使用。

+0

两个asp.net配置文件都指定了模拟吗?都在同一个安全区域吗? – sisve 2011-01-12 19:05:47

+0

@Simon:这两个文件都指定了模拟。不知道如何检查安全区域。 – 2011-01-12 19:08:16

回答

0

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

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

2

协商将在内部选择Ntlm或Kerberos身份验证。 如果网站说Ntlm只选择Ntlm身份验证。 请检查这两个网站,并使认证相同。

0

如果您的Internet Information Server(IIS)的版本是7.0走在<的%SystemDrive%一脸> /的Windows/System32下/ INETSRV /配置/ 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时发现它很有用。

1

需要启用Windows身份验证并禁用匿名身份验证才能获取已登录的用户(我在此假设您正在对域进行身份验证,并且如果用户不想回退到匿名用户使用Windows身份验证没有授权凭证)。

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

对不起,迟到的回应!