Pregunta

¿Cuál es la mejor solución para implementar el inicio de sesión único en una aplicación .net? Busqué en Google y encontré pocas soluciones, pero no estoy muy convencido con esas soluciones.

El usuario inicia sesión en el sitio web1 y luego se mueve al sitio web2. ¿Cómo sabrá el sitio web2 que el usuario ha iniciado sesión? Supongo que pasando algún token en la url que será verificado por el sitio web2 en la base de datos para verificar su validez. ¿Eso significa que necesito ordenar todas las URL en el sitio web1 que lleva al sitio web2?

En segundo lugar, si el usuario continúa navegando por el sitio web2 durante aproximadamente 1 hora y luego se mueve al sitio web1. Para ese momento, la sesión del sitio web1 ha expirado para que el usuario vea una página de inicio de sesión, ¿no es así? Pero este comportamiento es incorrecto según la funcionalidad de inicio de sesión único.

¿Fue útil?

Solución

Creo que no entiendes cómo funciona el inicio de sesión único.

Consideremos el sitio web1 y el sitio web2 que desean utilizar el inicio de sesión único.

Se crea un sitio web de inicio de sesión en identityProvider. Este es el único lugar donde aparece una pantalla de inicio de sesión.

Cuando el usuario visita el sitio web1 y elige iniciar sesión en el sitio web1, envía al usuario a la pantalla de inicio de sesión en identityProvider. El usuario inicia sesión en identityProvider, que elimina su propia cookie de inicio de sesión para su dominio (y tal vez le permite al usuario guardar su información de autenticación para que nunca más se le solicite). Luego redirige el navegador de regreso al sitio web1, incluido un token en la solicitud que abre el sitio web1, obtiene información de identidad y realiza sus propios bits de inicio de sesión (descarta su propia cookie de autenticación que dura lo que quiera).

Luego el usuario visita el sitio web2 y selecciona el inicio de sesión. El sitio web2 devuelve al usuario a identityProvider, que ya sabe quién es el usuario y, si el usuario ha elegido guardar su información de inicio de sesión, autentica silenciosamente y luego redirige al sitio web2 con otro token que el sitio web2 abre y luego realiza sus propios bits de inicio de sesión.

Hay mucha seguridad a su alrededor, que limita los tokens a sitios web particulares, solo permite que los tokens se envíen a sitios web incluidos en la lista blanca, etc., etc.

Entonces para abordar sus inquietudes

  1. El usuario inicia sesión en el sitio web1 y luego se mueve al sitio web2. ¿Cómo sabrá el sitio web2 que el usuario ha iniciado sesión? No lo hace. El sitio web2 debe solicitar primero la información de autenticación del sitio de inicio de sesión único.
  2. ¿Eso significa que necesito ordenar todas las URL en el sitio web1 que lleva al sitio web2? No, a menos que el sitio web1 también sea el proveedor de identidad. Incluso entonces, sería doloroso, mejor hacer que el sitio web2 redirija al proveedor de identidad si es necesario un token.
  3. En segundo lugar, si el usuario continúa navegando por el sitio web2 durante aproximadamente 1 hora y luego se mueve al sitio web1. Para ese momento, la sesión del sitio web1 ha expirado para que el usuario vea una página de inicio de sesión, ¿no es así? - Depende de cómo configure el sitio web1 y cuánto tiempo dura la cookie de autenticación.
  4. Pero este comportamiento es incorrecto según la funcionalidad de inicio de sesión único. No, no es. El inicio de sesión único no significa que obtenga un token flotante que se comparte entre sitios. Cada sitio web que utiliza el inicio de sesión único todavía crea su propia cookie de autenticación. Lo que podría suceder es que si el usuario vuelve al sitio web1, detecta una cookie de autenticación caducada, luego envía al usuario a la página de inicio de sesión único nuevamente donde se autentica (silenciosamente) y un nuevo token se devuelve al sitio web1, lo que crea un nuevo cookie de autenticación por sí misma.

Otros consejos

El enfoque oficial de Microsoft es a través de los Servicios de federación de Active Directory (que envuelve SAML con autenticación AD). Tiene las características que está buscando, pero posiblemente sea demasiado pesado para una aplicación web pública.

Supongo que no desea utilizar la autenticación de Windows con Active Directory, etc. Un método es pasar de una sesión autenticada a otra utilizando un token de seguridad en la cadena de consulta, como usted describe.

Ambas aplicaciones usan la misma clave de cifrado pública para codificar / decodificar el token de seguridad. Como dice, esto funciona bien si tiene enlaces de transición limitados y predefinidos entre los sitios, pero si desea poder usar cualquier enlace de página entre las aplicaciones, necesitaría generar esas URL sobre la marcha para que contengan el token.

La forma de lidiar con los tiempos de espera es que el token de seguridad también contiene un tiempo de caducidad. Genera un nuevo token de seguridad en cada solicitud de página o cuando crea un nuevo enlace entre aplicaciones.

Normalmente, el token de seguridad contiene un ID de usuario y un tiempo de espera y el comprobador de inicio de sesión devuelve el ID de usuario o es nulo si el tiempo de espera ha expirado.

No es una solución rápida para codificar de manera adecuada y segura. ¿Quizás pueda encontrar uno preconstruido en Code Project?

Puede usar diferentes mecanismos de SSO para diferentes aplicaciones según su aplicación.

  • Uso de la configuración de la máquina

  • Inicio de sesión único dentro de un dominio de segundo nivel

  • Cross Domains Using Common database (la implementación debe tomarse cuidado por nosotros)

Sin embargo, pude ver " SSO listo para usar " servicio de Live, Google, Yahoo, Facebook, etc. para proporcionar autenticación mediante el soporte de SAML. Esto nos ayudará a deshacernos de los problemas para mantener nuestra propia implementación del servicio SSO.

Si necesita una comprensión básica del funcionamiento del SSO, puede consultar aquí

MS hizo un trabajo en la empresa hace unos años: configuramos las muestras pero nunca las implementamos de verdad - Inicio de sesión único

Consulte este enlace con el uso de OAuth y proveedores sociales, ofrece una multitud de capacidades de autenticación ya integradas en .Net Video de capacitación de Microsoft en OAuth e inicio de sesión único con proveedores sociales

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top