C# IIS中的Windows身份验证问题

C# IIS中的Windows身份验证问题,c#,asp.net,windows,authentication,iis,C#,Asp.net,Windows,Authentication,Iis,我在C#和ASP.NET中工作,制作一个集成了安全性的基于Web的数据库应用程序,这样Windows用户就可以访问数据库。当我在VisualStudio的IIS Express中运行应用程序时,一切正常。当我在IIS下发布网页时,我遇到了Windows身份验证问题 在IIS Express中,以下两行代码生成与当前登录用户对应的相同Windows用户名,这也是我想要的: string user = Page.User.Identity.Name; string loginName = Syste

我在C#和ASP.NET中工作,制作一个集成了安全性的基于Web的数据库应用程序,这样Windows用户就可以访问数据库。当我在VisualStudio的IIS Express中运行应用程序时,一切正常。当我在IIS下发布网页时,我遇到了Windows身份验证问题

在IIS Express中,以下两行代码生成与当前登录用户对应的相同Windows用户名,这也是我想要的:

string user = Page.User.Identity.Name;
string loginName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
但是在IIS中发布的表单中,第二行给出了一个不同的用户:IIS APPPOOL\“我的Visual Studio解决方案的名称”。此用户没有数据库的权限,并且应用程序出现故障

我已在web.config中启用Windows身份验证:

<authentication mode="Windows" />
    <identity impersonate ="false" />
    <authorization>
      <deny users="?" />
    </authorization>

这是应用程序池设置:

有人能告诉我在哪里找问题吗?提前感谢。

请尝试以下代码:

string UserName = HttpContext.Current.User.Identity.Name;
string UserName = Request.LogonUserIdentity.Name;

这个问题与模仿有关。为了进行正确的模拟,我必须做两件事:1)我必须为我的应用程序在IIS中启用ASP.NET模拟。(这也可以在web.config中完成,但我不希望这样做,因为我随后必须更改服务器配置以使其正常工作。)2)我必须将应用程序池的托管管道模式从集成模式更改为经典模式,在IIS中也是如此


然后它成功了。感谢所有建议。

您希望它获得哪些用户凭据?IIS在它自己的用户下启动它,这是合乎逻辑的。只要给那个用户访问数据库的权限,一切都会好起来的。是的,这是可能的。但是在我们的环境中,Windows用户还可以控制您在SQL Server中访问哪些数据库。我希望Page.User.Identity与WindowsIdentity相同。首次使用IIS的用户必须了解这些区别。您可以参考: