如何在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。 如果是这样,请尝试禁用它。