如何获得Window用户身份? “User.Identity.Name”返回应用程序池标识而不是Windows用户

时间:2014-02-24 16:17:58

标签: asp.net-mvc asp.net-mvc-4 authentication iis applicationpoolidentity

我在IIS上部署了一个MVC 4应用程序。我试图让Windows用户在代码中如下,但它让我的应用程序池用户。

控制器内部代码以获取用户:

User.Identity.Name

我试图将App池标识分为本地系统,NetworkSystem和ApplicationPoolIdentity。但后来它停止了回撤任何事情。

我正在寻找的是我不想在用户点击网站时显示登录提示屏幕,网站应该自动选择系统用户并相应地显示结果。

配置如下:

<authentication mode="None"/>

先谢谢

4 个答案:

答案 0 :(得分:0)

如果您想让Windows用户使用他们的Windows凭据自动登录您的网站,您需要做的唯一更改来自:

<authentication mode="None" />

要:

<authentication mode="Windows" />

您的用户将自动在IE或其他已配置为NTLM身份验证的浏览器中登录。如果没有,他们仍会被提示重新输入他们的Windows凭据。

答案 1 :(得分:0)

我相信你想找到过程模型标识。这是运行应用程序池的ID。有时可以将其设置为SYSTEM,Network Service或Custom Domain Service帐户。那是对的吗?我在另一个帖子中找到了答案。

对于可能在苦苦挣扎的人,这是我用来获取启动AppPool的用户名的代码(它的身份):

ApplicationPool pool = serverManager.ApplicationPools["YoutAppPoolName"];  
pool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser; 
string user = pool.ProcessModel.UserName;–  p0enkieMay 7 '12 at 6:47

您需要添加对Microsoft.Web.Administration的引用才能使用ServerManager类。

答案 2 :(得分:0)

应用程序池中的更改对我有用。

在应用程序池高级设置中将Load User Settings更改为true,然后才有效。

答案 3 :(得分:0)

我正在使用Windows身份验证。我在Web.config文件中设置它:

 <authentication mode="Windows" />
 <authorization>
      <deny users="?" />
 </authorization>

我没有在web.config文件中放入任何模拟配置。

在IIS中,该应用程序的所有身份验证均已禁用,但Windows身份验证除外。

使用此设置,我使用以下代码行来获取Windows用户而不是正在访问数据库的应用程序池用户的登录名:

var page = new Page();
var currentUser = page.User.Identity.Name.ToString(); 

此命令返回:域\用户名。

如果我使用过:

var currentUser = 
System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

我会得到:Domain \ AppPooluser