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

Cha*_*adD 20 .net iis-6 windows-2003-webserver

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

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

当我远程访问Web服务器框并在那里登录并以localhost而不是机器名称访问该站点时,Web应用程序正常工作.但是,当我从另一台客户端计算机访问该网站时,我收到以下错误:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
Run Code Online (Sandbox Code Playgroud)

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

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

  <connectionStrings>
      <add name="MyConnection" connectionString="Data Source=MyDbServer;Initial Catalog=MyDatabase;Integrated Security=True"
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

我的Web服务器正在虚拟服务器上运行.这有关系吗?我假设没有.

请注意,如果我在Impersonation = TRUE后在Web配置中添加了我的域\登录名和密码,则该站点可以正常工作.

Chr*_*ris 34

听起来你正在遇到所谓的"双跳"问题,这是服务器不被信任将客户端的凭据传递到另一个盒子的地方(第1跳是IIS框的凭据,第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和-SQL server.aspx

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

  • 啊!双跳问题!非常感谢!我忘了 (2认同)

nun*_*cal 6

这里的问题是你正在使用

<authentication mode="Windows">    </authentication>
Run Code Online (Sandbox Code Playgroud)

这需要您的浏览器发送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.

请参阅:如何:使用Windows集成安全性访问SQL Server

如果您计划在Web上公开此Web服务,或者您希望将其提供给与您的服务器不在同一个域的用户,我建议您查看表单身份验证.