Accediendo al directorio activo de la organización desde .NET (II)
En el post anterior vimos que en ocasiones nuestra aplicación deberá acceder a los datos que contiene el directorio activo de nuestra organización, ya sea para buscar elementos, validar credenciales, etc.
Hoy nos centraremos en los objetos del framework que nos permiten realizar esto, empezando por el objeto WindowsIdentity, que nos acompaña desde la versión 1.0 del framework, y que representa un usuario de Windows.
WindowsIdentity
Representa un usuario de Windows. Dispone de un método GetCurrent() que devuelve una referencia al usuario de Windows que está ejecutando la aplicación y que por defecto será el usuario actual de Windows.
En nuestro ejercicio vamos a utilizar este objeto para mostrar en la barra de estado algo de información sobre el usuario actual. El nombre y token, así como el contexto de suplantación y diversa información cómo si está autenticado, es de sistema, etc.
El código es muy sencillo y para usarlo sólo debemos tener en cuenta haber importado el espacio de nombres System.Security.Principal:
private void RefreshUserInformation()
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
lblUser.Text = string.Format("User: {0}", user.Name);
lblToken.Text = string.Format("Token: {0}", user.Token.ToString());
lblImpersonating.Text = string.Format("Impersonating: {0}", user.ImpersonationLevel.ToString());
lblIsAnonymous.Text = string.Format("Is Anonymous: {0}", user.IsAnonymous.ToString());
lblIsAuthenticated.Text = string.Format("Is Authenticated: {0}", user.IsAuthenticated.ToString());
lblIsGuest.Text = string.Format("Is Guest: {0}", user.IsGuest.ToString());
lblIsSystem.Text = string.Format("Is System: {0}", user.IsSystem.ToString());
if (sec.ImpersonationContext == null)
{
cmdImpersonateApplicationAsUser.Enabled = true;
lblUser.ForeColor = Color.Black;
lblImpersonating.ForeColor = Color.Black;
}
else
{
cmdImpersonateApplicationAsUser.Enabled = false;
lblUser.ForeColor = Color.Red;
lblImpersonating.ForeColor = Color.Red;
}
cmdUndoImpersonation.Enabled = !cmdImpersonateApplicationAsUser.Enabled;
}
Lo único a destacar es que en caso de que exista suplantación (ImpersonationContext distinto de nulo), mostraremos algunos campos en color rojo, para destacar que este usuario es distinto del que inició sesión en Windows.
LDAPServices
En este proyecto he creado una clase que proporciona una serie de funcionalidades comunes, su nombre es LDAPServices y encapsula una serie de métodos estáticos, para facilitar el trabajo con LDAP. En los próximos posts detallaremos el uso de estos métodos:
SecurityContext
También aparece la clase llamada SecurityContext que ya hemos visto en la serie de posts sobre acceder a la caché de IE, que encapsula toda la lógica necesaria para impersonar nuestra aplicación y que se ejecute con otras credenciales de usuario de Windows.
Esta clase expone una propiedad de tipo WindowsImpersonationContext que devuelve información sobre si está realizando suplantación, y que en caso afirmativo permite terminarla mediante el método Undo(). También expone dos métodos LogonUser y ImpersonateUser, que permiten respectivamente validar unas credenciales de usuario contra un dominio y empezar un contexto de suplantación.
En el próximo post veremos cómo realizar esta suplantación y cómo recabar más información del usuario actual (por ejemplo a que grupos de Windows pertenece el usuario actual).
Hasta entonces!
4 Responsesso far
🙂
Hola Espinete,
Por supuesto. Esa es mi intención, al igual que con la serie de acceder a la caché de IE:
http://geeks.ms/blogs/lfranco/archive/2008/06/10/acceder-a-la-cach-233-de-internet-explorer-v-y-final.aspx
Espero tener tiempo para terminar la serie esta semana, o como mucho a principios de la que viene…
Saludos desde Andorra,
moltes gracies lluis!
ponlo lo antes que puedas, que yo necesito la librería lo antes posible 🙂
moltes graies lluis!
ponlo lo antes posible que yo necesito la librería cuanto antes.
🙂
Ya está publicado el tercer post de la serie, que incluye el código de ejemplo:
http://geeks.ms/blogs/lfranco/archive/2008/07/04/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iii.aspx
Saludos,