Autentica y GetRoles de usuarios de ActiveDirectory en una aplicación desconectada de WPF a través de MembershipProvider
active-directory membership-provider (1)
Tengo un requisito de proyecto donde necesito autenticarme contra ActiveDirectory en una aplicación WPF remota / desconectada.
Probablemente haya varias formas de intentar hacer esto, pero ¿cuál sería el mejor enfoque utilizando MembershipProvider de ActiveDirectory?
Necesito:
- Autentica que el usuario existe.
- obtener los grupos y roles del usuario de AD
Esto debe suceder desde una ubicación remota, fuera de la red en la que se encuentra Active Directory.
Desde dentro de una aplicación WinForms o WPF, ahora puede aprovechar los " Servicios de aplicación de cliente " (gracias a MS por un nombre muy genérico, la búsqueda de ayuda ahora es muy dolorosa).
Esto le permite conectarse a un servicio WCF que puede validar los inicios de sesión. El enlace de arriba tiene un tutorial que muestra lo fácil que es ponerlo todo en funcionamiento, una vez que tiene una aplicación en funcionamiento, puede modificar su configuración para que apunte a un MembershipProvider y / o RoleProvider diferente.
Vale la pena señalar que la solución lista para usar incluye un Proveedor de Membresía llamado ActiveDirectoryMembershipProvider , pero no hay RoleProvider para Active Directory.
Si necesita la posibilidad de obtener Roles (o Grupos) y está trabajando con .NET 4.0, entonces puede aprovechar la nueva API de Active Directory agregada que hace que todo sea mucho más fácil, a saber, System.DirectoryServices.AccountManagement . Para obtener los servicios más básicos de Membresía y Función, querrá tener lo siguiente para crear su propio MembershipProvider y RoleProvider básicos:
- MembershipProvider.ValidateUser () - debería usar PrincipalContext.ValidateCredentials ()
- RoleProvider.GetAllRoles (): use un nuevo GroupPrincipal () como fuente para un nuevo PrincipalSearcher ()
- RoleProvider.IsUserInrole () - use UserPrincipal . El método FindByIdentity () para obtener un usuario, use GroupPrincipal . FindByIdentity () para obtener el grupo, luego use el método IsMemberOf () en el usuario para ver si son miembros del grupo.
Puede implementar la menor o la mayor cantidad posible de la API, debe encontrar todo lo que necesita en el nuevo espacio de nombres AccountManagement para hacerlo.