usuario servidor query obtener grupos funcional directorio crear contraseña conexion conectar con cambiar activo active c# active-directory

servidor - obtener grupos de un usuario active directory c#



¿Cómo encuentro el nombre para mostrar de Active Directory en una aplicación web de C#? (5)

Estoy escribiendo una aplicación web que usa autenticación de Windows y puedo obtener el nombre de inicio de sesión del usuario usando algo como:

string login = User.Identity.Name.ToString();

Pero no necesito su nombre de usuario. Quiero su DisplayName. Me he estado golpeando la cabeza por un par de horas ...

¿Puedo acceder a la AD de mi organización a través de una aplicación web?


Existe un proyecto CodePlex para Linq a AD , si está interesado.

También está cubierto en el libro LINQ Unleashed for C # por Paul Kimmel - él usa el proyecto anterior como punto de partida.

no afiliado a ninguna de las fuentes, acabo de leer el libro recientemente


Qué tal esto:

private static string GetFullName() { try { DirectoryEntry de = new DirectoryEntry("WinNT://" + Environment.UserDomainName + "/" + Environment.UserName); return de.Properties["fullName"].Value.ToString(); } catch { return null; } }


En caso de que a alguien le importe, logré descifrar este:

/// This is some imaginary code to show you how to use it Session["USER"] = User.Identity.Name.ToString(); Session["LOGIN"] = RemoveDomainPrefix(User.Identity.Name.ToString()); // not a real function :D string ldappath = "LDAP://your_ldap_path"; // "LDAP://CN=<group name>, CN =<Users>, DC=<domain component>, DC=<domain component>,..." Session["cn"] = GetAttribute(ldappath, (string)Session["LOGIN"], "cn"); Session["displayName"] = GetAttribute(ldappath, (string)Session["LOGIN"], "displayName"); Session["mail"] = GetAttribute(ldappath, (string)Session["LOGIN"], "mail"); Session["givenName"] = GetAttribute(ldappath, (string)Session["LOGIN"], "givenName"); Session["sn"] = GetAttribute(ldappath, (string)Session["LOGIN"], "sn"); /// working code public static string GetAttribute(string ldappath, string sAMAccountName, string attribute) { string OUT = string.Empty; try { DirectoryEntry de = new DirectoryEntry(ldappath); DirectorySearcher ds = new DirectorySearcher(de); ds.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" + sAMAccountName + "))"; SearchResultCollection results = ds.FindAll(); foreach (SearchResult result in results) { OUT = GetProperty(result, attribute); } } catch (Exception t) { // System.Diagnostics.Debug.WriteLine(t.Message); } return (OUT != null) ? OUT : string.Empty; } public static string GetProperty(SearchResult searchResult, string PropertyName) { if (searchResult.Properties.Contains(PropertyName)) { return searchResult.Properties[PropertyName][0].ToString(); } else { return string.Empty; } }


Utilizar esta:

string displayName = UserPrincipal.Current.DisplayName;


Ver pregunta relacionada: Active Directory: Recuperar información del usuario

Consulte también: Howto: (Casi) Todo en Active Directory a través de C # y más específicamente, la sección " Enumerar las propiedades de un objeto ".

Si tiene una ruta para conectarse a un grupo en un dominio, el siguiente fragmento puede ser útil:

GetUserProperty("<myaccount>", "DisplayName"); public static string GetUserProperty(string accountName, string propertyName) { DirectoryEntry entry = new DirectoryEntry(); // "LDAP://CN=<group name>, CN =<Users>, DC=<domain component>, DC=<domain component>,..." entry.Path = "LDAP://..."; entry.AuthenticationType = AuthenticationTypes.Secure; DirectorySearcher search = new DirectorySearcher(entry); search.Filter = "(SAMAccountName=" + accountName + ")"; search.PropertiesToLoad.Add(propertyName); SearchResultCollection results = search.FindAll(); if (results != null && results.Count > 0) { return results[0].Properties[propertyName][0].ToString(); } else { return "Unknown User"; } }