C# WindowsIdentity和经典.Net应用程序池

C# WindowsIdentity和经典.Net应用程序池,c#,asp.net,iis-7,C#,Asp.net,Iis 7,我有一个ASP.NET网站,它要求我的应用程序池是经典的.NET应用程序池。该站点正在IIS 7上的.NET 3.5上运行。尝试获取登录用户的Active Directory用户名时: System.Security.Principal.WindowsIdentity.GetCurrent().Name 我得到以下信息: IIS APPPOOL\\Classic .NET AppPool 但是,当我将应用程序池设置为.net 4.0时,它会返回登录的用户名(这是我想要的)。是否缺少设置

我有一个ASP.NET网站,它要求我的应用程序池是经典的.NET应用程序池。该站点正在IIS 7上的.NET 3.5上运行。尝试获取登录用户的Active Directory用户名时:

System.Security.Principal.WindowsIdentity.GetCurrent().Name
我得到以下信息:

IIS APPPOOL\\Classic .NET AppPool   

但是,当我将应用程序池设置为.net 4.0时,它会返回登录的用户名(这是我想要的)。是否缺少设置?

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

编辑


因此,听起来您并没有真正获得用户凭据。当然,当您在本地运行时,您会获得域帐户……该进程正在您的凭据下运行。但是,当您在另一台计算机上运行时,它将在处理请求的帐户的凭据下运行…直到您告诉它模拟用户为止。即使如此,您也可能需要为站点设置Windows身份验证以获取凭据,或者使用带有广告挂钩的forms身份验证来获取当前用户帐户下的所有内容。

首先将以下几行放在web.config配置部分:

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

第二步转到IIS管理器打开您的web应用属性并检查以下身份验证设置:

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


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

在您的代码中,您在哪里使用Active Directory?我在这里看不到任何指示您正在使用AD的地方。。你熟悉广告吗。。?如果您使用的是网页,则返回的内容是正确的。Page.User.Identity.Name.Split(“\”)应返回数组pos 0中的域和数组pos 1中的用户,因此我对您尝试执行的操作有点困惑这是一个内部站点。当用户请求页面时,我正在使用System.Security.Principal.WindowsIdentity检查他们的身份。。。当我调试(未连接到IIS)时,我会按预期获得域/用户名,但当我将VS 2010绑定到IIS进行调试时,它会返回“IIS APPPOOL\\Classic.NET APPPOOL”。您是否尝试在web.config文件中显式设置
?是-但这模拟了在IIS中为网站设置的标识。这不会返回登录用户的标识。在3.5下,我可以将标识设置为LocalService、LocalSystem、NetworkServer和ApplicationPoolIdentity。每一个都返回一个与该设置关联的标识(例如“NT授权\\本地服务”)