1

我看到了一些与我类似的问题,但没有一个真正适用。我面临的问题是:

我需要通过以下方式获得用户的组成员身份:

  • 域 B 中的组
  • 域 A 中的用户。
  • 域 B 中的服务。
  • Forrest 到 Forrest 2 向信任。

用户附加到服务,服务获取带有 SID、名称等的 WindowsIdentity 对象。

为了获得组成员身份,我使用了 UserPrincipal 对象。为了得到它,你需要一个 PrincipalContext 对象。PrincipalContext 对象的构造函数需要域的 FQDN(即 A.some.domain.com)。WindowsIdentity 对象的用户名中有 NetBios 域名(即 A\User),但我看不到获取 DNS 名称的方法。

这是一个具有 DNS 名称 HARD CODED 的代码示例,它有效,但我需要取出硬编码部分。

-- WindowsIdentity wi (传入方法) --

PrincipalContext context = new PrincipalContext(ContextType.Domain, "A.some.domain.com");
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, IdentityType.Sid, wi.User.ToString());

我有另一个使用模拟的解决方案,使用 System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain().Name,但这是不可接受的,因为模拟可能不可用。我需要一个可以与TokenImpersonationLevel.Identification一起使用的解决方案

我花了几天时间搜索 MSDN 和 Google(包括 Stack Overflow),但无济于事。

4

1 回答 1

5

使用WindowsIdentity.Groups不行吗?如果 DomainA\User 正在访问 DomainB\Service,则用户的令牌应包括来自两个域的组。

于 2012-02-10T17:03:01.383 回答