es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Inicie sesión como usuario autenticado desde un proveedor de servicios externo con SSO de SAML utilizando ITfoxtec hacia el proveedor de servicios gestionado.

Mi equipo tiene la tarea de implementar SSO en nuestra aplicación web (completa .net 4.8 alojada en Azure). Sin embargo, necesitamos confiar en la autenticación de una aplicación externa.

Un poco de contexto. Imagina que hay 2 compañías separadas (A y B) que tienen aplicaciones web separadas (SPA y SPB). Nosotros somos la compañía B en este contexto.

Aquí está el flujo de trabajo solicitado:
1. Un usuario de SPA inicia sesión en SPA. Desconocemos el proceso de autenticación.
2. Este usuario quiere iniciar sesión en SPB sin escribir la contraseña y el correo electrónico (almacenado para autenticación en SPB).
3. Hacen clic en un botón en algún lugar de SPA y “mágicamente” inicia sesión en nuestro SPB sin ninguna solicitud adicional.

Hemos logrado esto con tokens de JWT anidados en encabezados de autorización. Esto es lo que sucede detrás de escena:
1. Un usuario presiona el botón en SPA que hace una llamada a nuestra API REST. La solicitud tiene 2 parámetros:
a. Clave de API (la proporcionamos a la compañía A), b. Nombre de la compañía.
2. La API confirma que la clave de API está asignada a una empresa (A) específica y emite un token de JWT.
3. El token de JWT se devuelve al cliente y se incluye en los encabezados de autenticación con todas las solicitudes posteriores.
4. La siguiente solicitud a nuestra API contiene el correo electrónico del usuario y el nombre de la organización. La API verifica que dicho usuario también exista en nuestra base de datos, lo autentica e inicia sesión en nuestra aplicación web de SPB.

Nuestro cliente solicitó que utilicemos el protocolo SAML2.0 en su lugar.

Estoy utilizando los proyectos de muestra de ITfoxtec como punto de partida, pero estoy bastante perdido. Todos los artículos externos quieren habilitar un IdP centralizado que solicitaría al usuario una contraseña y un correo electrónico una vez y las reclamaciones se pasarían del IdP a los SP. Esto no se aplica a nuestro caso, ya que los usuarios están autenticados en la aplicación SP_A.

¿Qué opinas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El flujo de trabajo solicitado consiste en implementar el inicio de sesión único (SSO) utilizando el protocolo SAML2.0 en lugar de tokens JWT. El desafío es que los usuarios están autenticados en SP_A y necesitamos confiar en este proceso de autenticación.

    Un enfoque posible es configurar SP_B como proveedor de servicios (SP) y SP_A como proveedor de identidad (IdP) en el protocolo SAML2.0. Cuando un usuario hace clic en el botón en SP_A, se envía una solicitud SAML al IdP, que incluye un AuthnRequest SAML y un parámetro RelayState con la URL de destino de SP_B. Luego, el usuario es redirigido a la página de inicio de sesión del IdP, donde se autentica utilizando sus credenciales de SP_A. Una vez autenticado, el IdP genera una respuesta SAML con una afirmación SAML que contiene la identidad y atributos del usuario, y la envía al navegador del usuario, que luego la envía al punto de enlace ACS de SP_B. SP_B luego valida la respuesta SAML, extrae la identidad y atributos del usuario de la afirmación SAML y crea una sesión local para el usuario.

    Para implementar este enfoque, puede utilizar la biblioteca ITfoxtec.Identity.Saml2, que proporciona clases para configurar los puntos de enlace SP e IdP, generar y validar mensajes SAML, y mapear los atributos SAML a reclamaciones. También puede utilizar la biblioteca ITfoxtec.Identity.Saml2.Mvc para integrar SAML2.0 en su aplicación MVC.

    Aquí están los pasos generales para implementar SSO utilizando SAML2.0 con ITfoxtec.Identity.Saml2:

    1. Configure SP_B como proveedor de servicios creando un objeto SAML2Configuration con la configuración del SP (por ejemplo, ID de entidad, URL ACS, certificado).
    2. Configure SP_A como proveedor de identidad creando un objeto SAML2Configuration con la configuración del IdP (por ejemplo, ID de entidad, URL de inicio de sesión único, certificado).
    3. Defina un controlador SAML en SP_A que maneje la solicitud de autenticación SAML de SP_B, inicie el proceso de SSO con el IdP y redirija al usuario a la URL de RelayState después de una autenticación exitosa.
    4. Defina un controlador SAML en SP_B que maneje la respuesta SAML del IdP, valide la firma y el emisor, extraiga la identidad y atributos del usuario y cree una sesión local para el usuario.
    5. Mapee los atributos SAML a las reclamaciones utilizando el espacio de nombres ITfoxtec.Identity.Saml2.ClaimsTransformation y agregue las reclamaciones a la identidad del usuario autenticado.
    6. Proteja la aplicación web de SP_B con una política de autorización que requiera autenticación SSO y pruebe el flujo de trabajo SSO con usuarios de muestra de SP_A.

    En general, implementar SSO utilizando SAML2.0 requiere cierta configuración, pero proporciona una solución segura y escalable para la autenticación federada en múltiples aplicaciones web. Con la ayuda de la biblioteca ITfoxtec.Identity.Saml2, puede simplificar el proceso de desarrollo y prueba y centrarse en la lógica principal de su aplicación web.

Comments are closed.