2009-02-04 6 views
6

Me gustaría obtener membresías de un grupo de usuarios en un ActiveDirectory, sin estar en el dominio. Cuando ejecuto esto dentro del dominio, todo está bien.Solicitar las funciones de un usuario en AD cuando la persona que llama no está en el 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); 
} 

Sin embargo, cuando corro fuera del dominio, que tiene que especificar el PrincipalContext Lie este:

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

Cuando ejecuto el código, me sale una excepción cuando ejecuto principal.GetAuthorizationGroups(). La excepción que recibo es:

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

Respuesta

1

Parece un problema de DNS.

El localizador de DC funciona haciendo consultas de DNS para registros de SRV para encontrar el DC adecuado en su sitio actual. Si esas cosas no están en DNS, el localizador de DC fallará, lo que está sucediendo en tu rastro de pila.

+0

Tuve este problema. La ejecución de "nslookup yourdomain" debe resolverse en su DC. – T3hc13h

0

Puede ser que, no puedo verificarlo ahora.

Intenté lo siguiente: uso el excelente Active DirectoryExplorer de sysinternals. Al iniciar la sesión con las mismas credenciales: 10.0.1.255, "administrator", "password"

Ahora puedo ver los grupos del usuario sin problemas como

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

simplemente que tenía que hacer frente a un mismo problema. Espero que esto ayude a alguien más.

/*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]); 
    } 
} 
Cuestiones relacionadas