我正在创建一个内部网asp.net mvc应用程序,公司中的每个人都应该可以访问它。我需要运行模拟数据库访问的网站等,但我想知道每个用户是谁。
当我看Page.User.Identity.Name
时,它是空白的。即使网站正在模拟运行,是否可以获取用户的Windows帐户名称?
修改 这里有更多信息。我在IIS 6中有一个运行匿名访问的站点。该站点在可以访问数据库的系统帐户下运行(因为所有员工都无权访问数据库)。
我的web.config有<authentication mode="Windows" />
和<identity impersonate="true"/>
我的目标是用户不必登录 - 他们登录我们网络的事实(以及该网站不在外部IP上的事实)是足够的身份验证。我想知道用户是谁以跟踪他们所做的更改等等。
答案 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仍然有用。听起来您的网站设置为允许匿名身份验证。如果是这样,请尝试禁用它。