如何从包含来自不同域的用户的AD组中获取用户。
例如,我的活动目录中有2个域, Domain1.corp.com 和 Domain2.corp.com
我有一个名为 TestGroup 的广告组,其中包含来自两个域的用户。
Domain1用户:TestUser1,TestUser2
Domain2用户:TestUser3,TestUser4,TestUser5
TestGroup用户:TestUser1,TestUser2,TestUser3,TestUser5
以下可能只返回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;
}
}
}
当返回用户名变量时,我会看到仅来自Domain1.Am的用户我在这里遗漏了什么? 我的IIS服务器位于Domain1.corp.com
中我通过运行powershell脚本验证服务器是否可以访问其他域,该脚本返回位于这两个域中的用户。
get-adgroupmember "TestGroup" -recursive
答案 0 :(得分:1)
您需要为组使用基础System.DirectoryServices.DirectoryEntry
:
var groupEntry = (DirectoryEntry)group.GetUnderlyingObject();
(注意:根据MSDN GetUnderlyingObject()将返回DirectoryEntry
,即使返回类型为object
。)
从那里你可以获得会员专有名称:
var memberDistinguishedNames = groupEntry.Properties["member"].Cast<string>();
来自其他域的用户是外部安全主体,因此专有名称的格式为CN={SecurityIdentifier},CN=ForeignSecurityPrincipals
。您可以提取安全标识符并在其他域上搜索用户,以获取其余的详细信息。不幸的是,这确实意味着您需要连接到两个域,这可能很慢。