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

时间:2009-08-12 15:50:08

标签: asp.net-mvc impersonation

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

当我看Page.User.Identity.Name时,它是空白的。即使网站正在模拟运行,是否可以获取用户的Windows帐户名称?

修改 这里有更多信息。我在IIS 6中有一个运行匿名访问的站点。该站点在可以访问数据库的系统帐户下运行(因为所有员工都无权访问数据库)。

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

我的目标是用户不必登录 - 他们登录我们网络的事实(以及该网站不在外部IP上的事实)是足够的身份验证。我想知道用户是谁以跟踪他们所做的更改等等。

3 个答案:

答案 0 :(得分:120)

在您的应用程序中使用<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身份验证”,您将看到以下结果:

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身份验证”,您将看到以下结果:

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

答案 1 :(得分:6)

试试这个

System.Security.Principal.WindowsIdentity.GetCurrent().Name

它应该返回一个包含用户登录名的字符串

答案 2 :(得分:1)

除非MVC框架下的此功能发生了变化,并且我认为它没有,否则Page.User.Identity.Name仍然有用。听起来您的网站设置为允许匿名身份验证。如果是这样,请尝试禁用它。