2009-02-04 8 views
6

Vorrei ottenere l'appartenenza a un gruppo di un utente in una ActiveDirectory, senza essere nel dominio. Quando eseguo questo all'interno del dominio, tutto va bene.Richiedere i ruoli di un utente in AD quando il chiamante non è nel dominio

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

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

Tuttavia, quando si esegue fuori del dominio, devo specificare il PrincipalContext trovano questo:

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

Quando ho eseguito questo codice, ottengo un'eccezione quando eseguo principal.GetAuthorizationGroups(). L'eccezione che ottengo è:

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() 

risposta

1

Sembra un problema DNS.

Il localizzatore CC funziona eseguendo query DNS per i record SRV per trovare la DC appropriata nel sito corrente. Se quella roba non è nel DNS, il localizzatore DC fallirà, cosa che sta accadendo nella traccia dello stack.

+0

Ho avuto questo problema. L'esecuzione di "nslookup yourdomain" dovrebbe risolversi nel tuo DC. – T3hc13h

0

Potrebbe essere che, non posso verificarlo adesso.

Ho provato quanto segue: utilizzo l'eccellente Active DirectoryExplorer di sysinternals. Quando si accede con le stesse credenziali: 10.0.1.255, "administrator", "password"

Ora riesco a vedere gruppi dell'utente senza problemi come

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

Ho appena avuto a che fare con lo stesso problema. Spero che questo aiuti qualcun altro.

/*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]); 
    } 
} 
Problemi correlati