【发布时间】:2016-04-18 16:47:30
【问题描述】:
我正在编写一个 LDAP 接口,对于给定组的 objectguid,它必须返回这些组中所有用户的列表以及用户的 SID。
对于给定组的objectguid,下面的代码返回该组中的用户。但是它们都是形式...
CN=Chad Hutchins,OU=Contractors,DC=RM,DC=LOCAL
...但我需要用户的 SID 与上述字符串。有没有办法从一个组开始获取用户的 SID 并查询该组中的所有用户?
using System.DirectoryServices;
public void GetUsers(Guid groupId, string domain, string username, string password)
{
var rootEntry = new DirectoryEntry("LDAP://" + domain);
rootEntry.Username = username;
rootEntry.Password = password;
var searcher = new DirectorySearcher(rootEntry);
searcher.Filter = @"(objectguid=" + ConvertGuidToOctectString(groupId) + ")";
var groupResult = searcher.FindOne();
foreach (DictionaryEntry prop in groupResult.Properties)
{
var key = (string)prop.Key;
switch (key)
{
case "member":
foreach (string name in groupResult.Properties[key])
Console.WriteLine(name);
break;
}
}
}
private string ConvertGuidToOctectString(Guid guid)
{
var byteGuid = guid.ToByteArray();
var queryGuid = string.Empty;
foreach (var b in byteGuid)
{
queryGuid += @"\" + b.ToString("x2");
}
return queryGuid;
}
【问题讨论】:
-
你可以使用
AccountManagement类吗?获取用户SID真的很容易。如果没有,那么您可以将所有成员的所有DistinguishedName存储在字符串列表中,然后按用户的DN 搜索用户,然后您可以检索SIDs。
标签: .net active-directory ldap directoryservices