如何获取窗口用户标识? "User.Identity.Name"返回应用程序池标识而不是 Windows 用户



我在 IIS 上部署了一个 MVC 4 应用程序。我正在尝试在代码中获取 Windows 用户,如下所示,但它让我成为应用程序池用户。

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

User.Identity.Name
我试图将应用程序池标识

转换为本地系统,网络系统和应用程序池标识。但后来它停止了对任何东西的回复。

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

配置如下:

<authentication mode="None"/>

提前致谢

如果要使 Windows 用户能够使用其 Windows 凭据自动登录到您的网站,则唯一需要进行的更改是:

<authentication mode="None" />

自:

<authentication mode="Windows" />

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

我相信

你想找到进程模型标识。这是运行应用程序池的 ID。有时,这可以设置为系统、网络服务或自定义域服务帐户。这是对的吗?我在另一个线程中找到了答案。

对于可能正在苦苦挣扎的人,这是我用来获取启动 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 类。

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

在应用程序池高级设置中将Load User Settings更改为true,并且它起作用了。

我正在使用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();

我会得到:域\应用池用户

最新更新