【发布时间】:2013-09-25 16:16:49
【问题描述】:
我有以下代码块,它使用 System.DirectoryServices.AccountManagement 按组名查询 Active Directory 中的用户:
var domainContext = new PrincipalContext(ContextType.Domain, "company.container.internal");
var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext, IdentityType.Name, "Lvl1Users");
if (groupPrincipal != null)
{
//Read the values
}
现在该网站使用以下内容:
- Win2k8 上的 IIS7
- Windows 身份验证
- 模拟 = 真
- .NET 4.0 上的应用程序池使用“NETWORK SERVICE”作为帐户
在我的本地机器上(你知道这是怎么回事)一切都很好。我的同龄人在本地尝试它也效果很好。但是,一旦部署到服务器,它会显示以下内容:
发生操作错误。
我研究的所有内容都表明这是一个权限问题。需要注意的一件事,在我的本地机器上,我在 MainNetwork 域上,这是我正在查询的 company.container.internal 域的父域。 IIS 机器位于company.container.internal 上并且正在查询同一个域。老实说,我认为更具挑战性的情况是在我位于不同域的本地计算机上读取 AD,但它确实有效。在查询同一个域的服务器上,它失败了。
这是我尝试过的,没有一个奏效:
- 将 AppPool 更改为“LocalSystem”
- 将 AppPool 更改为使用静态超级管理员帐户
- 在代码中使用 Impersonation 来操作本地块中调用的上下文,其中管理员用户在
MainNetwork域上。 - 在代码中使用 Impersonation 在本地块中与
company.container.internal域上的管理员用户一起操作调用的上下文。 - 添加
using (HostingEnvironment.Impersonate())
这里给出了什么?我尝试在两个域上模拟每种类型的电源管理员,并使用了多个 AppPool 设置,但我一直收到相同的错误。代码中是否需要通过域的声明进行更改,或者是否存在我遗漏的权限问题?
【问题讨论】:
标签: c# active-directory directoryservices adsi