3

我有一个 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 时,它会返回登录的用户名(这是我想要的)。我错过了一个设置吗?

4

2 回答 2

3

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

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

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

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

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

于 2012-09-28T19:25:38.300 回答
0

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

编辑

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

于 2012-09-28T18:56:12.040 回答