WindowsIdentity和Classic .Net应用程序池

时间:2012-09-28 18:41:46

标签: c# asp.net iis-7

我有一个ASP.NET网站,要求我的App Pool是Classic .Net App Pool。该站点在IIS 7上的.NET 3.5上运行。当我尝试获取登录用户的Active Directory用户名时:

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

我得到以下内容:

IIS APPPOOL\\Classic .NET AppPool   

然而,当我将应用程序池设置为.net 4.0时,它会返回登录的用户名(这就是我想要的)。我错过了一个设置吗?

2 个答案:

答案 0 :(得分:3)

首先将这些行放在web.config配置部分:

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

再次访问IIS管理器,打开您的Web应用程序属性,并检查以下身份验证设置:

匿名身份验证=已禁用, ASP.NET Impersonation =已启用(这不是必需的), Windows身份验证=已启用

此设置将为您提供Active Directory用户并模拟它。

答案 1 :(得分:0)

如果使用相同的代码并且它在一个应用程序池中工作而不在另一个应用程序池中,我将检查应用程序池的设置。查找Identity属性。我想,在.NET 4.0池下,你将拥有ApplicationPoolIdentity,在3.5下,你有一个硬编码帐户。

修改

所以听起来你并没有真正获得用户凭据。当然,当您在本地运行时,您将获得域帐户....此过程在您的凭据下运行。但是,当您在另一台计算机上运行时,它将在处理请求的帐户的凭据下运行...直到您告诉它模拟用户为止。即便如此,您可能必须为站点设置Windows身份验证以获取凭据或使用带有AD挂钩的表单身份验证来获取当前用户帐户下的所有内容。