46

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

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

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

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

我的目标是用户不必登录——他们登录到我们的网络这一事实(以及该站点不在外部 IP 上的事实)就足以进行身份​​验证。我只想知道用户是谁,以便跟踪他们所做的更改等。

4

4 回答 4

123

<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
于 2009-11-06T15:12:18.350 回答
6

试试这个

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

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

于 2009-08-12T15:53:23.077 回答
4

我只是想发布我的修复,因为没有其他人对此发表任何评论。

当我将网站发布到服务器时,我遇到了同样的问题,但不是在我的本地。所有的设置都是一样的。但是,在 IIS 中,“默认网站”从未关闭过。它正在运行并拦截流量,即使没有与之关联的站点。匿名身份验证在默认情况下已打开,但在我的网站在端口 80 下运行时已关闭。我的网站已关闭它似乎并不重要......因为默认已打开,它已为所有流量打开到 80 端口。

禁用默认网页解决了这个问题。将端口更改为 8080 也可以。

我希望这可以帮助别人。

于 2018-09-14T21:47:48.107 回答
1

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

于 2009-08-12T15:55:51.387 回答