用户'NT AUTHORITY \ ANONYMOUS LOGON'的Web App登录失败

时间:2012-06-09 00:27:17

标签: .net iis-6 windows-2003-webserver

我看到很多人都会遇到这个错误,但他们的情况都与我的情况有所不同。

我有一个在Windows 2003 Server上的IIS 6.0中运行的ASP.NET 4.0 Web应用程序。

当我远程访问网络服务器并登录该网站并以 localhost 而不是按计算机名称访问该网站时,该网络应用程序正常运行。但是,当我从另一台客户端计算机访问该网站时,出现以下错误:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

该网站启用了匿名访问,启用了Windows身份验证。该Web应用程序包含以下内容:

    <authentication mode="Windows">    </authentication>
    <identity impersonate="true"/>

  <connectionStrings>
      <add name="MyConnection" connectionString="Data Source=MyDbServer;Initial Catalog=MyDatabase;Integrated Security=True"
</connectionStrings>

我的网络服务器正在虚拟服务器上运行。这有关系吗?我不认为。

请注意,如果我在Impersonation = TRUE后在网络配置中添加了我的域\登录名和密码,则该网站可以正常运行。

3 个答案:

答案 0 :(得分:33)

听起来你正在遇到所谓的“双跳”问题,这是服务器不被信任将客户端的凭据传递到另一个盒子的地方(第1跳是IIS框的凭据, hop 2是从IIS框到SQL Server)。

当您直接登录到服务器时,不需要进行第二跳,因为它只是直接从客户端计算机(在此方案中为IIS服务器)将凭据直接传递给SQL Server。同样,如果SQL Server存在于IIS框中,则也不会出现此错误,因为客户端只会向可以与IIS和SQL Server共享凭据的框发出一个请求。

要使委托工作需要很多步骤,例如信任服务器以进行委派,创建SPN并确保为IIS用于运行网站的帐户提供其他适当的权限。有一篇technet文章可以帮助您完成许多必要的步骤:http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx

注意:如果你使用的是NTLM而不是Kerberos(或其他可委托协议),它将无法工作,因为中间服务器(IIS服务器)需要有一个令牌,它可以传递由于NTLM基于协商,因此不起作用。

答案 1 :(得分:6)

这里的问题是你正在使用

<authentication mode="Windows">    </authentication>

这需要您的浏览器发送NTLM凭据。 Firefox默认不发送此内容。

当您在服务器上并使用localhost时,您的浏览器会将您的Windows登录凭据发送到服务器。它正在验证并授予用户MyDomain \ MyID的访问权限。

ASP.NET模拟IIS传递给它的令牌,IIS是经过身份验证的用户或匿名Internet用户帐户(IUSR_machinename)。

从不在该域中的计算机发生的所有Web请求都将在匿名帐户下运行。在您的情况下,NT AUTHORITY\ANONYMOUS LOGON

您的连接字符串正在使用Integrated Security=True。这意味着asp.net线程正在处理的Windows帐户也必须能够访问数据库。 如果要传递用于登录IIS的Windows凭据,则必须设置Trusted_Connection=Yes

参考:How to: Access SQL Server Using Windows Integrated Security

我建议您查看表单身份验证,如果您打算在网络上公开此网络服务,或者您希望将其提供给与您的域名不同的用户服务器

答案 2 :(得分:0)

我发现问题在于我在IIS中启用了Windows身份验证而不是基本身份验证。一旦我切换到基本身份验证,我就能够在登录帐户下访问SQL Server。

  

在IIS中,只有基本身份验证使用安全令牌记录用户   流经网络到远程SQL服务器。默认情况下,   与身份一起使用的其他IIS安全模式   配置元素设置不会产生可以的令牌   对远程SQL Server进行身份验证。

来自:http://msdn.microsoft.com/en-us/library/bsz5788z.aspx