如何在asp.net中使用identity impersonate =“true”时获取Windows用户名?

我正在创build一个公司中的每个人都应该有权访问的intranet asp.net mvc应用程序。 我需要运行模拟数据库访问等网站,但我想知道每个用户是谁。

当我查看Page.User.Identity.Name它是空白的。 即使站点正在运行模拟,是否有可能获得用户的Windows帐户名称?

编辑:这里有一些更多的信息。 我有IIS 6中启用匿名访问运行的站点。 该站点在有权访问数据库的系统帐户下运行(因为所有员工都无权访问数据库)。

我的web.config有<authentication mode="Windows" /><identity impersonate="true"/>

我的目标是用户不必login – login到我们的networking的事实(以及网站不在外部IP的事实)是足够的身份validation。 我只想知道用户是为了跟踪他们所做的改变等等。

在应用程序中使用<authentication mode="Windows"/>并在IIS中启用匿名访问时,您将看到以下结果:

 System.Environment.UserName: Computer Name Page.User.Identity.Name: Blank System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name 

在您的应用程序中使用<authentication mode="Windows"/> ,禁用“匿名访问”,并且只有IIS中的“集成Windows身份validation”,您将看到以下结果:

 System.Environment.UserName: ASPNET (user account used to run ASP.NET service) Page.User.Identity.Name: Domain\ Windows Account Name System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name\ASPNET 

在您的应用程序中使用<authentication mode="Windows"/><identity impersonate ="true"/> ,并且IIS中禁用“匿名访问”并且只有“集成Windows身份validation”,您将看到以下结果:

 System.Environment.UserName: Windows Account Name Page.User.Identity.Name: Domain\ Windows Account Name System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name 

尝试这个

 Principal.WindowsIdentity.GetCurrent.Name 

它应该返回一个string与用户login名

除非在MVC框架下这个function已经改变了,我不认为它已经有了,Page.User.Identity.Name仍然可以工作。 听起来像你的网站设置为允许匿名身份validation。 如果是这样,请尝试禁用它。