2010-06-14 15 views
10

Tengo una pregunta. Un cliente que he estado haciendo un poco de trabajo recientemente tiene una gama de sitios web con diferentes mecanismos de inicio de sesión. Está buscando migrar lentamente a un único inicio de sesión mecanismo para sus sitios web (todo escrito en asp.net mvc).Múltiples sitios web, diseño de inicio de sesión único

Estoy buscando en mis opciones aquí, asi que aquí hay una lista de requisitos:

  1. Tiene que ser seguro (la)
  2. que necesita para apoyar las propiedades de usuario adicionales más allá del nombre usual , dirección de cosas (como dinero o créditos para un usuario)
  3. Tiene que proporcionar una consola web de administración de usuarios centralizada para su conveniencia (entiendo que este será un pequeño proyecto además de cualquier solución de diseño que elija para ir a)
  4. Tiene que integrarse con el w existente ebsites sin reingeniería de todo el producto (entiendo que esto depende de la implementación actual del producto).
  5. Tiene que tratar con el envío de correos electrónicos al usuario cuando se registra (para activar su cuenta)
  6. Tiene que ver con activar al usuario cuando hace clic en el enlace activarme en el correo electrónico (entiendo que 5 y 6 requieren algún tipo de sistema de plantillas de correo electrónico para soportar diferentes correos electrónicos por aplicación)

estaba pensando en la creación de una biblioteca de trabajo junto con la autenticación de formularios que expone todos los métodos necesarios (por ejemplo, conexión, desconexión, activar, etc. y un pequeño y tranquilo servicio para implementar la activación desde el correo electrónico, el proceso de registro, etc.

Teniendo en cuenta que se han dejado muchas cosas para hacer que esta pregunta sea breve y al grano, ¿suena como un buen diseño?

Pero esto parece ser un problema muy común, ¿no hay ningún proyecto existente que pueda utilizar?

Gracias por leer.

Respuesta

3

Lo básico es darse cuenta de que no puede autenticar a un usuario utilizando la Autenticación de formularios estándar en varios dominios. Por ejemplo, dev.google.com y www.google.com son dominios diferentes y si un usuario inicia sesión en dev.google.com, no inicia sesión automáticamente en www.google.com a menos que Google haga algo especial para habilitar esto. Esto se debe a que el navegador no puede acceder a las cookies de otro sitio web.

La única manera de hacer que el signo de dominio cruzado funcione es incluir un valor clave como una ID de sesión en la cadena de consulta de la URL que examina el sitio web y establece la cookie de autenticación del usuario. Probablemente pueda hacer eso manualmente a través de su sitio usando un poco de su propio código personalizado.

Ejemplo: http://www.example.com/autoLogin.aspx?sessionid=23232323

El peligro de este enfoque es que aunque alguien podría suplantar una sesión de usuario mediante la búsqueda de la dirección que fue utilizado por el usuario y la comprobación de la identificación de la sesión. Por lo tanto, debe asegurarse de que el valor utilizado para autenticar al usuario en todos los dominios sea temporal y dinámico. No lo convierta en la identificación de usuario o nombre de usuario del usuario o algo así.

Ahora, si los sitios están en el mismo dominio, puede darles la misma MachineKey y luego un usuario que ya inició sesión en un sitio no se cerrará cuando se mueva por los diferentes sitios web en el mismo dominio.

+0

Lo hicimos a través de un guid y la base de datos tiene una tabla de "autologin" con un tiempo de caducidad de 3 minutos. Esto supone que todo el sitio puede acceder a una única base de datos compartida. – dvallejo

+0

Utilicé este enfoque como fuente de inspiración y creé un servicio de inicio de sesión único que utiliza tokens para garantizar que la solicitud no haya sido alterada. no necesita la clave del equipo ya que el usuario se reenvía (en términos reales o transparentes) en un servicio de inicio de sesión y cuando se autentica exitosamente regresa a la URL de retorno que recibe un token cifrado y le pide al servicio de inicio de sesión que lo desencripte. si tiene éxito, la información del usuario se almacena en la sesión (o se utilizan cookies o cualquier mecanismo de almacenamiento) – Yannis

2

Mire en el modelo del proveedor de membresía ASP.Net.

A continuación hay una pequeña muestra de enlaces a recursos en MSDN al respecto. Debería cubrir todas sus necesidades. Los dos últimos enlaces corresponden a una implementación de muestra en SQL. Puede expandir fácilmente los campos para satisfacer sus necesidades.

Su otra opción es poner en práctica inicio de sesión con OpenID/Windows Live o similar.

+0

conozco el proveedor de membresía de ASP.Net, pero ¿es flexible para el escenario que mencioné? por ejemplo, ¿cómo delega el envío de correos electrónicos para la confirmación, etc. a la aplicación web subyacente? thx – Yannis

+0

Se debe crear un correo electrónico en la parte superior del proveedor. P.ej. http://www.c-sharpcorner.com/uploadfile/raj1979/passwordrecovery10032008150514pm/passwordrecovery.aspx tiene un control de recuperación de pw ASP.Net que realiza envíos por correo electrónico. –

+0

Se agregó una nota sobre el uso de OpenID o Winodws Live para SSO. Dependiendo de su escenario, podría ser una opción. –

Cuestiones relacionadas