我在IIS上部署了一个MVC 4应用程序。我试图让Windows用户在代码中如下,但它让我的应用程序池用户。
控制器内部代码以获取用户:
User.Identity.Name
我试图将App池标识分为本地系统,NetworkSystem和ApplicationPoolIdentity。但后来它停止了回撤任何事情。
我正在寻找的是我不想在用户点击网站时显示登录提示屏幕,网站应该自动选择系统用户并相应地显示结果。
配置如下:
<authentication mode="None"/>
先谢谢
答案 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