.net - police - lista negra wlan
Solicite las funciones de un usuario en AD cuando la persona que llama no está en el dominio (3)
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.
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, tengo que especificar el PrincipalContext mentir esto:
var context = new PrincipalContext(ContextType.Domain, "10.0.1.255", "DC=test,DC=ad,DC=be", "administrator", "password");
Cuando ejecuto este código, obtengo una excepción cuando ejecuto el principal.GetAuthorizationGroups()
. La excepción que obtengo 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()
Parece un problema de DNS.
El localizador DC funciona haciendo consultas DNS para registros SRV para encontrar el DC apropiado 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.
Puede ser que, no puedo verificarlo ahora.
Intenté lo siguiente: uso el excelente Active DirectoryExplorer de sysinternals. Al iniciar sesión con las mismas credenciales: 10.0.1.255, "administrator", "password"
Ahora puedo ver los grupos de usuarios sin problemas ya que
["memberOf"] = "CN=TestGroup,CN=Users,DC=test,DC=ad,DC=be"
Solo tuve que lidiar con el 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]);
}
}