我正在尝试读出有权阅读文档的用户。我已经可以连接到目录并读出身份参考,但现在我想在Active Directory中查找ID并从此ID中读出名称。
DirectorySecurity ds = Directory.GetAccessControl(path);
AuthorizationRuleCollection arc = ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
foreach (FileSystemAccessRule fsar in arc)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("Identity : " + fsar.IdentityReference.Value);
sb.AppendLine("FileSystemRights : " + fsar.FileSystemRights);
+ fsar.PropagationFlags);
Console.WriteLine(sb.ToString());
我已经可以连接AD服务器,现在我想使用DirectorySearcher搜索IdentityReference。
System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(@"LDAP://mydomain.local/");
entry.Username = username;
entry.Password = password;
System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(entry);
mySearcher.Filter = "(......)"; //searching for IdentityReference
我该怎么做?
顺便说一下:我是一名C#初学者,感谢每一个答案。答案 0 :(得分:0)
如您所见here,身份参考是SID(S-1-2-3434-1234243 ...)或NT帐户名(DOMAIN \ john.doe)。这些可以使用Translate
方法相互转换,因此您可以使用其中任何一个。决定你喜欢哪一个并进行翻译。如果引用已经是那种格式并不重要,它总是更容易进行翻译,你可以确定它将是你喜欢的任何内容。
为了根据这些属性中的任何一个查找用户,我建议使用PrincipalContext.FindByIdentity
方法。它支持SID和登录名查找等,并且比LDAP过滤器容易得多。
但是,当然,如果您愿意,可以编写LDAP过滤器。我不确定登录名,因为它不是以该格式直接存储在AD中,但如果您为objectSid
属性编写查询,则绝对可以搜索SID,例如(objectSid=S-1-2-3434...)