2009-02-04 6 views
6

Ich möchte die Gruppenmitgliedschaften eines Benutzers in einem ActiveDirectory abrufen, ohne in der Domäne zu sein. Wenn ich das innerhalb der Domain starte, ist alles in Ordnung.Fragen Sie die Rollen eines Benutzers in AD, wenn der Anrufer nicht in der Domäne ist

var context = new PrincipalContext(ContextType.Domain); 
var principal = UserPrincipal.FindByIdentity(context, IdentityType.Name, "administrator"); 

foreach (var authorizationGroup in principal.GetAuthorizationGroups()) 
{ 
    Console.WriteLine(authorizationGroup.Name); 
} 

Allerdings, wenn ich außerhalb der Domäne ausgeführt, muss ich angeben, die diese liegen Principal:

var context = new PrincipalContext(ContextType.Domain, "10.0.1.255", "DC=test,DC=ad,DC=be", "administrator", "password"); 

Wenn ich diesen Code ausführen, ich eine Ausnahme, wenn ich principal.GetAuthorizationGroups() auszuführen. Die Ausnahme, die ich bekomme, ist:

System.DirectoryServices.AccountManagement.PrincipalOperationException: Information about the domain could not be retrieved (1355). 
at System.DirectoryServices.AccountManagement.Utils.GetDcName(String computerName, String domainName, String siteName, Int32 flags) 
at System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDomainInfo() 
at System.DirectoryServices.AccountManagement.ADStoreCtx.get_DnsDomainName() 
at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p) 
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroupsHelper() 
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups() 

Antwort

1

Sieht aus wie ein DNS-Problem.

Der DC-Locator arbeitet mit DNS-Abfragen für SRV-Datensätze, um den entsprechenden Domänencontroller in Ihrer aktuellen Site zu finden. Wenn das Zeug nicht in DNS ist, wird der DC-Locator fehlschlagen, was in Ihrem Stack-Trace passiert.

+0

Ich hatte dieses Problem. Das Ausführen von "nslookup yourdomain" sollte zu Ihrem Domänencontroller aufgelöst werden. – T3hc13h

0

Es könnte sein, dass ich es jetzt nicht verifizieren kann.

Ich habe Folgendes versucht: Ich verwende den ausgezeichneten Active DirectoryExplorer von sysinternals. Wenn es mit den gleichen Anmeldeinformationen Anmeldung: 10.0.1.255, "administrator", "password"

Jetzt kann ich die Gruppen des Benutzers sehen ohne Probleme als

["memberOf"] = "CN=TestGroup,CN=Users,DC=test,DC=ad,DC=be" 
2

Ich hatte gerade mit dem gleichen Problem zu beschäftigen. Ich hoffe, dass dies jemand anderem hilft.

/*Argument*/ 
string username; 



/*Global settings*/ 
string ADHost = "dc.a.b.c"; /*Or ip address*/ 
string ADUsername = "username"; 
string ADPassword = "password"; 
string ADDomain = "a.b.c"; 
string ADContainer = "DC=A,DC=B,DC=C"; /*I have a function to do the translation*/ 
/*Global settings*/ 

var list = new List<string>(); 

var path = "LDAP://" + ADHost + "/" + ADContainer; 
var deDomain = new DirectoryEntry(path, ADUsername, ADPassword); 
var ds = new DirectorySearcher(deDomain, "(&(objectClass=User)(sAMAccountName=" + username + "))"); 

ds.SearchScope = SearchScope.Subtree; /*Cascade*/ 
ds.ReferralChasing = ReferralChasingOption.All; /*Follow redirection*/ 

var usr = ds.FindOne(); 
if (null != usr) 
{ 
    var deUsr = new DirectoryEntry(usr.Path, ADUsername, ADPassword); 

    foreach (string groupDN in deUsr.Properties["memberOf"]) 
    { 
     string[] parts = groupDN.Replace("CN=", "").Split(','); 
     list.Add(parts[0]); 
    } 
} 
Verwandte Themen