ASP.NET 远程访问时模拟错误

ASP.NET Impersonate Error when accessed remotely

我有一个网站托管在我网络中服务器上的 IIS 上。该网站使用以我的用户名运行的应用程序池。我的用户名在服务器的管理员组中。

Windows 身份验证已启用,而匿名身份验证已禁用。此外,ASP.NET 模拟已启用。

我通过添加以下行在 web,config 中启用了模拟:

<identity impersonate="true" />

我还通过添加以下行在 web.config 中启用了 windows 身份验证:

<authentication mode="Windows" />

该页面包含打开数据库连接的代码 Page_Load:

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Default"].ConnectionString);

        try
        {
            connection.Open();
        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }
        finally
        {
            if (connection.State != System.Data.ConnectionState.Closed)
            {
                connection.Close();
            }
        }

当我在服务器上的浏览器中打开页面时,页面运行正常。当我使用相同的 URL 并从我的机器打开它时,出现以下错误。请注意,其他不使用模拟的网站在我将它们托管在同一台服务器上并从我的计算机访问它们时正常工作。

我得到的错误是:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

在此先感谢您的帮助

这可能是两件事:

  1. 您的浏览器未使用 Kerberos,而是使用 NTLM。由于目标既未获得 Kerberos 票证也未获得用户密码,因此无法对数据库进行身份验证。您可以使用 Kerberos 约束委派启用它,或者如果在同一台机器上 - 允许 IIS 进程在本地模拟任何用户。
  2. 您的数据库在另一台主机上:您将不得不使用 Kerberos 约束委派。

为了清楚起见,请补充说明:如果您的 ADDC 不是公开可用的(最好不要),那么您将无法通过 Kerberos 进行身份验证。
NTLM 可能会缓解这个问题,但它经常与不同的浏览器有问题 - 另外:不要使用 NTLM - 从 IIS 中删除该提供程序 - NTLM 已死。