ldap - significado - sso seguridad
¿Cómo construir integración LDAP para mi aplicación web? (6)
Mi empresa desarrolla y vende una aplicación SaaS que tiene cientos de clientes. Algunos de nuestros clientes nos han pedido que admitamos la integración de LDAP para autenticar las cuentas de usuario en sus sistemas existentes en lugar de tener que crear otra cuenta de inicio de sesión para cada uno de sus empleados. Parece que esto se conoce como inicio de sesión único (SSO) en muchos lugares? Naturalmente, nuestro sistema ya tiene un mecanismo para mantener los perfiles de las cuentas de usuario y autenticar esas cuentas de usuario desde nuestra página de inicio de sesión.
Somos un poco ignorantes acerca de LDAP y estamos confundidos acerca de algunas cosas. Por favor, disculpe el posible uso de terminología incorrecta (recuerde, somos un poco ignorantes sobre esto).
Creemos que entendemos los conceptos básicos de cómo podría funcionar esto:
- Nuestro cliente configura su cuenta para "activar" la función de "autenticación remota" para su cuenta. Proporcionan la URL remota que autenticará a sus usuarios.
- Los usuarios visitan nuestra página de inicio de sesión e intentan iniciar sesión con su nombre de usuario y contraseña proporcionados por el sistema LDAP de su compañía.
- Nuestra página de inicio de sesión reenviará de forma segura las credenciales de inicio de sesión (presumiblemente encriptadas y con hash en algún formato acordado) a la URL de "autenticación remota" proporcionada por nuestro cliente.
- El script del cliente autentificará al usuario y luego lo redireccionará a nuestro sitio con el "estado de autenticación".
- Nuestra página analizará el "estado de autenticación" y aceptará que el usuario haya iniciado sesión o no.
Suponiendo que la información anterior sea incluso semi-correcta, aún necesitaremos que cada usuario tenga una cuenta en nuestro sistema. ¿No necesitaremos alguna forma de sincronizar nuestros perfiles de cuenta de usuario con los perfiles de usuario en el directorio LDAP? ¿Es esto simplemente una "identificación externa" que hace referencia a la identificación del usuario en el sistema LDAP? ¿Sería necesario que el script de "autenticación remota" del cliente proporcione esa identificación a nuestro sistema para que sepamos con qué cuenta de usuario en nuestro sistema asociar el inicio de sesión?
¿Qué nos falta?
Por cierto, nuestra plataforma es IIS, ASP.Net 2.0 y SQL Server 2005.
Aquí hay un bit de software útil que permite acceder a los directorios LDAP a través de la web, utilizando JSON-RPC: Json2Ldap
Como siempre, recuerde validar la prueba de autenticación para asegurarse de que la contraseña enviada no esté en blanco.
Un enlace con un nombre de usuario y sin contraseña se considera un enlace anónimo, según el estándar, y parece que ha tenido éxito. Cuando de hecho, realmente no lo hizo.
Este es un problema que debe resolver la aplicación, ya que el servidor LDAP solo sigue el estándar, un estándar molesto, pero un estándar, no obstante.
Debe decidir cómo planea vincular un usuario de LDAP a una cuenta dentro de su aplicación.
Por ejemplo, podría requerir que el nombre de usuario dentro del sistema LDAP coincida con el nombre de usuario dentro de su aplicación, o podría requerir que alguien especifique explícitamente un nombre de usuario LDAP dentro de cada cuenta de usuario en su aplicación.
Una vez que haya resuelto el enlace, simplemente puede ejecutar un enlace LDAP para probar las credenciales del usuario.
Hay varias opciones. Si realmente quiere decir LDAP, a diferencia de solo Active Directory, probablemente buscaría usar System.DirectoryServices.Protocols para realizar un enlace LDAP usando las credenciales proporcionadas a través de un canal seguro.
Estrictamente, esto no es Single Sign-On. SSO significa solo tener que enviar sus créditos una vez que inicie sesión por primera vez. Esto simplemente está reduciendo la complejidad para los usuarios al tener solo una ID única. Por lo general, para los clientes de Windows en un entorno empresarial con una combinación de plataformas y tecnologías, el SSO se logra mediante un cliente agregado al escritorio que administra la autenticación a varios sistemas. En un entorno solo para MS, puede lograr el SSO si todas sus aplicaciones web están en IIS, usa IE y usa la autenticación de Windows integrada, la suplantación de identidad y todo eso.
Podría considerar la inscripción automática de un usuario autenticado en su sistema, a menos que requiera que se preconfiguren los datos del tipo de perfil. Si requiere preconfiguración de usuarios, puede considerar importar regularmente (todos, o un subconjunto filtrado) de usuarios desde el directorio LDAP y tenerlos en un estado no configurado, de tal manera que los administradores seleccionen de una lista existente de no -configurado los usuarios en lugar de escribir en IDs. De lo contrario, se arriesga a que sus administradores escriban la ID de usuario incorrecta y no coincidan.
Podría proporcionar una API tal que las soluciones de Identity and Access Management (dada su inclinación de Microsoft, vea ILM2 007 como ejemplo) pueden integrarse con su sistema y hacer toda la administración de la cuenta de usuario por usted.
La forma en que esto funciona en nuestro sistema:
- Cuando un usuario navega a la aplicación web, se asume que la variable del servidor REMOTE_USER es el token del usuario
- El código de inicio de sesión se conecta al directorio ldap con una cuenta específica de búsqueda
- El código de inicio de sesión busca una cuenta de ldap que "coincida" con el REMOTE_USER
- El código de inicio de sesión intenta hacer coincidir esa cuenta con una cuenta en nuestro sistema
- Si la coincidencia es posible en todo el proceso, suponga que el usuario ha iniciado sesión como la cuenta coincidente, continúe normalmente
De esta manera, el usuario puede reutilizar la autenticación de su dominio de Windows dentro de nuestra aplicación.
Quizás considere Autenticación V Autorización
Autenticación - ¿Qué usuario es este? Autorización: ¿quién debería poder usar la aplicación, usuarios específicos, grupos?
Actualmente, implica la autorización a través de la autenticación porque solo aquellos que están registrados en su aplicación pueden usarla.
Si usa un directorio en lugar de su almacén de datos personalizado, entonces
- utiliza el método de conexión de directorio para autenticar al usuario
- usted (puede) obtener autenticación gratis: el usuario es conocido por windows, windows puede identificar a iis y sqlserver, tal vez no sea necesario preguntarle al usuario quién es.
- sabrá de más usuarios que tienen autorización y deberá aplicar restricciones; limite las conexiones a un grupo en particular.
- podría almacenar datos de usuario en el directorio, en lugar de almacenarlos en el servidor sql.
Si sus usuarios realmente quieren LDAP genérico, entonces usted quiere mirar en (C) ldap_connect, ldap_bind_s
(C #) LDAPConnection System.DirectoryServices.Protocols
O de nuevo a AD este inicio de sesión único .Net desmitificado podría ayudar