2009-04-17 26 views
28

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 cuentas de usuario contra 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 cuenta de usuario y autenticar esas cuentas de usuario desde nuestra página de inicio de sesión.¿Cómo construir la integración de LDAP para mi aplicación web?

Somos un poco ignorantes sobre LDAP y estamos confundidos acerca de algunas cosas. Disculpe el posible uso de una terminología equivocada (recuerde, somos un poco ignorantes sobre esto).

Creemos entender los conceptos básicos de cómo esto podría funcionar:

  • Nuestro cliente configura su cuenta para "activar" la función de "autenticación remota" por su cuenta. Proporcionan la URL remota que autenticará a sus usuarios.
  • Los usuarios acceden a 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 enviará de manera segura las credenciales de inicio de sesión (presumiblemente cifradas y hash en algún formato acordado) a la URL de "autenticación remota" proporcionada por nuestro cliente.
  • La secuencia de comandos del cliente autenticará 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á al usuario como conectado o no.

Suponiendo que la información anterior es 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? ¿Se requeriría entonces que la secuencia de comandos de "autenticación remota" del cliente debe proporcionar esa identificación a nuestro sistema para que sepamos en qué cuenta de usuario de nuestro sistema asociamos el inicio de sesión?

¿Qué nos falta?

Por cierto, nuestra plataforma es IIS, ASP.Net 2.0 y SQL Server 2005.

Respuesta

9

Hay varias opciones. Si realmente quiere decir LDAP, en lugar de solo Active Directory, probablemente vería el uso de System.DirectoryServices.Protocols para realizar un enlace LDAP utilizando 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 reduce la complejidad para los usuarios al tener solo una identificación única. Por lo general, para los clientes de Windows en un entorno empresarial con una combinación de plataformas y tecnologías, SSO se logra mediante un cliente agregado al escritorio que administra la autenticación a varios sistemas. En un entorno solo de MS, puede lograr SSO si todas sus aplicaciones web están en IIS, utiliza IE y usa Autenticación de Windows integrada, suplantación 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 necesita una configuración previa de usuarios, podría considerar importar regularmente (todos o un subconjunto filtrado de) usuarios del directorio LDAP y tenerlos en un estado no configurado, de modo que los administradores seleccionen de una lista existente de no -configurados usuarios en lugar de escribir identificaciones. De lo contrario, corre el riesgo de que los administradores tipeen la ID de usuario incorrecta y no coincidan.

Puede proporcionar una API tal que las soluciones de Gestión de identidades y accesos (dada su inclinación de Microsoft, vea ILM2 007 como ejemplo) puedan integrarse con su sistema y realizar toda la administración de cuentas de usuario por usted.

1

Es necesario decidir cómo se va a enlazar un usuario LDAP a una cuenta dentro de su aplicación.

Por ejemplo, puede requerir que el nombre de usuario dentro del sistema LDAP coincida con el nombre de usuario de su aplicación, o puede requerir que alguien especifique explícitamente un nombre de usuario LDAP dentro de cada cuenta de usuario en su aplicación.

Una vez que tenga ese enlace resuelto, puede simplemente ejecutar un enlace LDAP para probar las credenciales del usuario.

3

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 ninguna contraseña se considera un enlace anónimo, según el estándar, y parece que ha tenido éxito. Cuando de hecho, realmente no fue así.

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.

2

considerar Quizás autenticación Vs autorización de autenticación

- qué usuario es esto? Autorización: ¿quién debería poder usar la aplicación, los usuarios especificados, los grupos?

Actualmente implica autorización a través de la autenticación porque solo aquellos que están registrados en su aplicación pueden usarla.

Si utiliza un directorio en lugar de su almacén de datos personalizado, entonces

  • utilizar el método de conexión de directorio para autenticar al usuario
  • que (puede) conseguir una autentificación de forma gratuita - el usuario es conocido por las ventanas, ventanas Puede identificar a iis y sqlserver, tal vez no sea necesario preguntarle al usuario quiénes son.
  • sabrá de más usuarios que tienen autorización y necesitan aplicar restricciones: limite las conexiones a un grupo en particular.
  • podría almacenar los datos del usuario en el directorio, en lugar de los datos de la aplicación en el servidor sql.

Si los usuarios quieren realmente LDAP genérico, entonces usted desee ver en (C) ldap_connect, ldap_bind_s (C#) LDAPConnection System.DirectoryServices.Protocols

O, de nuevo de nuevo a AD este Demystified .Net App single sign on podría ayudar a

1

La forma en que esto funciona en nuestro sistema:

  • Cuando un usuario navega a la aplicación web, la variable de servidor REMOTE_USER se supone que es testigo del usuario
  • El código de acceso se conecta al directorio LDAP con una cuenta de búsqueda específica
  • El código de inicio de sesión busca un LDAP cuenta de que las "coincidencias" la REMOTE_USER
  • El código de inicio de sesión a continuación, intenta hacer coincidir esa cuenta con una cuenta en nuestro sistema
  • Si es posible coincidencia de todo el camino a través, suponga que el usuario ha iniciado sesión como la cuenta emparejado, continuar normalmente

de esta manera el usuario puede volver a utilizar su autenticación ventanas de dominio dentro de nuestra aplicación.

1

Aquí hay un bit útil de software que permite acceder a los directorios LDAP a través de la web, usando JSON-RPC: Json2Ldap

Cuestiones relacionadas