使用 PrincipalContext 从另一个 AD 域获取用户
Getting users from another AD Domain using PrincipalContext
如何从包含来自不同域的用户的 AD 组中获取用户。
例如,我的活动目录中有 2 个域,Domain1.corp.com 和 Domain2.corp.com
我有一个名为 TestGroup 的 AD 组,其中包含来自两个域的用户。
Domain1 users: TestUser1, TestUser2
Domain2 users: TestUser3, TestUser4, TestUser5
TestGroup users: TestUser1, TestUser2, TestUser3, TestUser5
以下可能 return 仅限 Domain1 用户。
string domainname = "Domain1.corp.com:3268";
string usernames = String.Empty;
using (var p_context = new PrincipalContext(ContextType.Domain, domainname))
{
using (var group = GroupPrincipal.FindByIdentity(context, "TestGroup"))
{
var users = group.GetMembers(false);
foreach (var user in users)
{
username = username + ", " + user.SamAccountName;
}
}
}
当 return 输入用户名变量时,我只能看到来自 Domain1.Am 的用户 我在这里遗漏了什么?
我的 IIS 服务器位于 Domain1.corp.com
我通过 运行 一个 powershell 脚本验证了服务器可以访问另一个域,该脚本 returned 位于两个域中的用户。
get-adgroupmember "TestGroup" -recursive
参考:
您需要为群组使用基础System.DirectoryServices.DirectoryEntry
:
var groupEntry = (DirectoryEntry)group.GetUnderlyingObject();
(注意:根据 MSDN GetUnderlyingObject() 将 return 一个 DirectoryEntry
,即使 return 类型是 object
。)
从那里您可以获得成员的专有名称:
var memberDistinguishedNames = groupEntry.Properties["member"].Cast<string>();
来自其他域的用户是外部安全主体,因此专有名称将采用 CN={SecurityIdentifier},CN=ForeignSecurityPrincipals
形式。您可以提取安全标识符并在另一个 domain/s 上搜索用户,以获取他们的其余详细信息。不幸的是,这确实意味着您需要连接到两个域,这可能很慢。
如何从包含来自不同域的用户的 AD 组中获取用户。
例如,我的活动目录中有 2 个域,Domain1.corp.com 和 Domain2.corp.com
我有一个名为 TestGroup 的 AD 组,其中包含来自两个域的用户。
Domain1 users: TestUser1, TestUser2
Domain2 users: TestUser3, TestUser4, TestUser5
TestGroup users: TestUser1, TestUser2, TestUser3, TestUser5
以下可能 return 仅限 Domain1 用户。
string domainname = "Domain1.corp.com:3268";
string usernames = String.Empty;
using (var p_context = new PrincipalContext(ContextType.Domain, domainname))
{
using (var group = GroupPrincipal.FindByIdentity(context, "TestGroup"))
{
var users = group.GetMembers(false);
foreach (var user in users)
{
username = username + ", " + user.SamAccountName;
}
}
}
当 return 输入用户名变量时,我只能看到来自 Domain1.Am 的用户 我在这里遗漏了什么? 我的 IIS 服务器位于 Domain1.corp.com
我通过 运行 一个 powershell 脚本验证了服务器可以访问另一个域,该脚本 returned 位于两个域中的用户。
get-adgroupmember "TestGroup" -recursive
参考:
您需要为群组使用基础System.DirectoryServices.DirectoryEntry
:
var groupEntry = (DirectoryEntry)group.GetUnderlyingObject();
(注意:根据 MSDN GetUnderlyingObject() 将 return 一个 DirectoryEntry
,即使 return 类型是 object
。)
从那里您可以获得成员的专有名称:
var memberDistinguishedNames = groupEntry.Properties["member"].Cast<string>();
来自其他域的用户是外部安全主体,因此专有名称将采用 CN={SecurityIdentifier},CN=ForeignSecurityPrincipals
形式。您可以提取安全标识符并在另一个 domain/s 上搜索用户,以获取他们的其余详细信息。不幸的是,这确实意味着您需要连接到两个域,这可能很慢。