C# 跨域active directory组成员身份

C# 跨域active directory组成员身份,c#,.net,active-directory,dns,netbios,C#,.net,Active Directory,Dns,Netbios,我见过一些和我一样的问题,但没有一个真正适用。我面临的问题是: 我需要获得以下用户的组成员资格: 域B中的组 域A中的用户 域B中的服务 Forrest对Forrest双向信任 用户连接到服务,服务获取具有SID、名称等的WindowsIdentity对象 为了获得组成员资格,我使用了UserPrincipal对象。为了得到它,您需要一个PrincipalContext对象。PrincipalContext对象的构造函数需要域的FQDN(即A.some.domain.com)。Windows

我见过一些和我一样的问题,但没有一个真正适用。我面临的问题是:

我需要获得以下用户的组成员资格:

  • 域B中的组
  • 域A中的用户
  • 域B中的服务
  • Forrest对Forrest双向信任
用户连接到服务,服务获取具有SID、名称等的WindowsIdentity对象

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

下面是一个DNS名称硬编码的代码示例,它可以工作,但我需要去掉硬编码部分

--WindowsIdentity wi(传递到方法中)--

我有另一个使用模拟的解决方案,使用System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain().Name,但这是不可接受的,因为模拟可能不可用。我需要一个能与令牌模拟级别.标识一起工作的解决方案


我花了几天时间搜索MSDN和Google(包括堆栈溢出),但都没有结果。

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

使用
WindowsIdentity.Group
是否无效?如果DomainA\User正在访问DomainB\Service,则用户的令牌应包括来自两个域的组

简单的回答是,这将起作用。只是花了几个小时测试这个。我的印象是来自WindowsIdentity.groups属性的组可能已过时或不完整。这是真的,但是当跨越域边界访问服务时,令牌总是新的。打得好。简短的回答是这会起作用。只是花了几个小时测试这个。我的印象是来自WindowsIdentity.groups属性的组可能已过时或不完整。这是真的,但是当跨越域边界访问服务时,令牌总是新的。好电话。
PrincipalContext context = new PrincipalContext(ContextType.Domain, "A.some.domain.com");
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, IdentityType.Sid, wi.User.ToString());