我有以下代码块,使用组名查询 Active Directory 中的用户 System.DirectoryServices.AccountManagement
:
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 上的应用程序池,使用“网络服务”作为帐户
在我的本地机器上(你知道这是怎么回事)一切都很好。我的同龄人在本地尝试它也效果很好。但是,一旦部署到服务器,它会显示以下内容:
发生操作错误。
我研究的所有内容都表明这是一个权限问题。需要注意的一件事,在我的本地计算机上,我位于我正在查询的域MainNetwork
的父company.container.internal
域上。IIS 机器已打开company.container.internal
并正在查询同一个域。老实说,我认为更具挑战性的情况是在我位于不同域的本地计算机上读取 AD,但它确实有效。在查询同一域的服务器上,它失败了。
这是我尝试过的,但这些都没有奏效:
- 将 AppPool 更改为“LocalSystem”
- 更改 AppPool 以使用静态超级管理员帐户
- 在代码中使用模拟来操作本地块中的调用上下文,并使用
MainNetwork
域上的管理员用户。 - 在代码中使用模拟来操作本地块中的调用上下文,并使用
company.container.internal
域上的管理员用户。 - 加入
using (HostingEnvironment.Impersonate())
这里给出了什么?我尝试在两个域上模拟每种类型的电源管理员,并使用了多个 AppPool 设置,但我一直收到相同的错误。代码中是否需要通过域的声明进行更改,或者是否存在我遗漏的权限问题?