2017-04-07 1 views
0

Das Szenario, mit dem ich konfrontiert bin, ist der Zugriff auf Active Directory-Eigenschaften für einen Benutzer und die Gruppen, denen sie angehören, von einem Webserver in einer DMZ, die nicht der Domäne angehört. Unser Infrastrukturteam hat zu diesem Zweck LDAPS-Konnektivität zu einem bestimmten Domänencontroller geöffnet, den ich mit seinem DNS-Namen aufrufen kann. (Ich habe diesen Code ursprünglich mit einem PrincipalContext geschrieben, aber das erzeugte bezogene Abfragen auf andere Domänencontroller und scheiterte aufgrund von Firewall-Einschränkungen, weshalb ich auf die DirectoryServices-API der unteren Ebene herabsetze).Wie konstruiere ich einen DirectoryEntry mit einem bestimmten Domänencontroller und einer SID für einen Benutzer oder eine Gruppe?

Konkret möchte ich einen bestimmten Domänencontroller nach einer Liste der Mitglieder einer Sicherheitsgruppe fragen, deren SID ich als Zeichenfolge habe.

kann ich an den bestimmten Domänencontroller verbinden eine Wurzel Directory wie diese zu erstellen:

var root = new DirectoryEntry("LDAP://mydc.mydomain.com"); 

... und von dort kann ich eine Directory schaffen wie so für eine Gruppe von Namen zu suchen:

var searcher = new DirectorySearcher(root) { 
    Filter = "(&(object=(objectCategory=group)(cn=Group Name))" 
} 

Das funktioniert gut, aber ich habe Mühe, eine gleichwertige Syntax für die Suche nach einer SID zu finden. Die meisten Threads ich gefunden habe, deuten darauf hin, diese Syntax für direkt den Directory Instanziieren basierend auf der SID selbst:

new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid)) 

... aber ich kann kein Beispiel nicht finden, wo ich beide Controller der Domäne angeben, die für die verwenden Suche und die SID nach suchen. Dankbar, wenn mir jemand in die richtige Richtung stoßen könnte.

Antwort

0

ich es herausgefunden:

var root = new DirectoryEntry(string.Format("LDAP://mydc.mydomain.com/<SID={0}>", sid)); 
Verwandte Themen