Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 当identity impersonate=”时如何获取Windows用户名;“真的”;在asp.net中?_Asp.net Mvc_Impersonation - Fatal编程技术网

Asp.net mvc 当identity impersonate=”时如何获取Windows用户名;“真的”;在asp.net中?

Asp.net mvc 当identity impersonate=”时如何获取Windows用户名;“真的”;在asp.net中?,asp.net-mvc,impersonation,Asp.net Mvc,Impersonation,我正在创建一个内部网asp.net mvc应用程序,公司中的每个人都应该可以访问该应用程序。我需要运行数据库访问等模拟网站,但我想知道每个用户是谁 当我看Page.User.Identity.Name时,它是空白的。即使站点正在模拟运行,也可以获取用户的windows帐户名吗 编辑: 这里有更多的信息。我在IIS 6中有一个启用匿名访问的站点。该站点在有权访问数据库的系统帐户下运行(因为所有员工都无权访问数据库) 我的web.config有和 我的目标是用户不必登录——他们登录到我们的网络(以及

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

当我看
Page.User.Identity.Name时,它是空白的。即使站点正在模拟运行,也可以获取用户的windows帐户名吗

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

我的web.config有

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

试试这个

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

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

,除非在MVC框架下此功能已经更改,而且我认为它没有更改,否则Page.User.Identity.name应该仍然有效。听起来您的站点设置为允许匿名身份验证。如果是,请尝试禁用它。

在应用程序中启用
,并在IIS中启用匿名访问,您将看到以下结果:

System.Environment.UserName: Computer Name
Page.User.Identity.Name: Blank
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name 
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
System.Environment.UserName: Windows Account Name 
Page.User.Identity.Name: Domain\ Windows Account Name 
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name
在应用程序中使用
,并且在IIS中禁用“匿名访问”且仅使用“集成Windows身份验证”时,您将看到以下结果:

System.Environment.UserName: Computer Name
Page.User.Identity.Name: Blank
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name 
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
System.Environment.UserName: Windows Account Name 
Page.User.Identity.Name: Domain\ Windows Account Name 
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name
在应用程序中使用
,并且在IIS中禁用“匿名访问”且仅使用“集成Windows身份验证”时,您将看到以下结果:

System.Environment.UserName: Computer Name
Page.User.Identity.Name: Blank
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name 
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
System.Environment.UserName: Windows Account Name 
Page.User.Identity.Name: Domain\ Windows Account Name 
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name

我只是想发布我的补丁,因为没有其他人说过这件事

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

禁用默认web解决了此问题。将端口更改为8080同样有效


我希望这对其他人有所帮助。

谢谢Gav-我尝试了这一方法,它显示了我的站点要运行的帐户的名称(有关更多信息,请参阅问题中的编辑)。您认为当他们访问站点时,如果他们登录到域IIS将使用当前登录,您需要禁用IIS中的匿名访问。上面的代码应该显示他们的用户ID,而不是IIS运行的用户名。谢谢Ryan。我在问题中添加了更多细节,但基本上我需要匿名身份验证。如果提供了更多信息,您需要
。您希望web应用在IIS提供的标识下运行
impersonate=“false”
确保情况属实。您还希望启用集成身份验证并禁用匿名身份验证。这确保Page.User.Identity将是查看页面的用户的身份。如果服务器和用户在同一个域上,他们不应该实际提供凭据。很抱歉,回复时间太长了。我已经有一段时间没有机会在这里参与了。这是其中一个答案,我希望有一个最喜欢的答案,就像最喜欢的答案一样questions@BlackTigerX有,你可以奖励悬赏给优秀的答案。。。这样做会让你获得利他主义徽章,这是你在别人的问题上手动授予的第一笔奖金。为什么微软不在他们的文档中包含这样清晰、简短的解释?谢谢您的回答。Thread.CurrentPrincipal.Identity.Name呢?如果你再加上这个,我想它会更完整。