如何在Active Directory中查找IdentityReference?

时间:2014-02-05 13:19:27

标签: c# active-directory

我正在尝试读出有权阅读文档的用户。我已经可以连接到目录并读出身份参考,但现在我想在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#初学者,感谢每一个答案。

1 个答案:

答案 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...)