在Visual Studio环境中,在调试期间,我通过以下熟悉的c#代码行检索正确的用户名:
WindowsIdentity.GetCurrent().Name;
但是,当我使用IIS 7.5将项目发布到Windows 2008 R2上的服务器时,它会返回NT AUTHORITY \ SYSTEM
我已配置web.config使用 < authentication mode =“Windows”/>
使用配置为使用集成模式且标识设置为LocalSystem的应用程序池
在虚拟文件夹的IIS上,我已禁用匿名身份验证并将启用设置为Windows身份验证。
这是该公司第一次为微软开发而设,因此正在努力正确地设置环境。
我想让代码工作的原因是什么?或许,什么是更好的代码,将返回我的Window NY身份验证用户? 还有一件事:如果我对strUserName进行硬编码,则提取User FullName的其余代码可以正常工作。因此AD工作。
花了一两天时间来解决这个问题,我们将不胜感激。谢谢,
答案 0 :(得分:0)
将应用程序池作为NT AUTHORITY \ SYSTEM(又名LocalSystem)运行是危险的。这意味着在IIS中运行的代码在系统中具有最高权限。 如果您选择默认的IIS APPPOOL \ Application Pool Name(又名ApplicationPoolIdentity),则IIS模拟了要处理的帐户。
答案 1 :(得分:0)
发布此SURPRISE答案,因为我无法找到配置;环境设置和/或代码,以确定提取NT Auth用户的最佳方法。我最终使用标准的非常规方式,并放弃了WindowsIdentity无法工作的原因。
回去使用它。它仍然使用具有“集成”模式的App Pool和设置为“ApplicationPoolIdentity”的Identity;并且该站点仅“启用”为“Windows身份验证”。下面的线很好用,我得到了我需要的东西。
Request.ServerVariables [ “AUTH_USER”];
答案 2 :(得分:0)
这是我解决此问题的方法。它不漂亮,但是可以用
将[CustomAuthorize]属性添加到我的操作中,并将类添加到控制器中
[CustomAuthorize]
public ActionResult Index()
{
var http = this.HttpContext;
String UserID = http.User.Identity.Name;
return View();
}
public class CustomAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return true;
}
}
项目具有“已启用Windows身份验证”属性。集成托管管道模式。 项目Windows身份验证已启用的IIS配置。 应用程序池已集成。
希望有帮助。