Hacemos una revisión exhaustiva cada escrito de nuestro espacio con la meta de enseñarte siempre la información más veraz y certera.
Solución:
Recientemente pasé por el mismo proceso de pensamiento: nunca había oído hablar de SAMLnecesitaba habilitar una aplicación web para autenticarse a través de SAML con OneLogin como proveedor de identidad (en lugar de Active Directory).
Durante la implementación, hice un uso intensivo de la documentación de OneLogin y el passport-saml
biblioteca, las cuales recomiendo, aunque no estoy afiliado a ninguna.
Me di cuenta de que la confusión era triple:
(1) cómo funciona SAML,
(2) cómo el passport-saml
la biblioteca funciona en Node, y
(3) cómo configurar el proveedor de identidad (OneLogin, Directorio Activo, o de otro modo). Lo que sigue es mi intento de una explicación de “explicar como si tuviera cinco”.
SAML
El lenguaje de marcado de aserción de seguridad (SAML) es un estándar XML que permite a los usuarios iniciar sesión en función de su sesión de navegador. Hay mucho, pero básicamente, permite un proceso de autenticación más simple. Un usuario puede hacer clic en un botón en lugar de enviar un formulario con nombre de usuario y contraseña.
La forma en que funciona SAML es un poco más complicada. Encontré útil esta descripción general de OneLogin y el diagrama adjunto:
El diagrama representa el siguiente proceso:
- El usuario hace clic en un botón para autenticarse en una aplicación determinada (a veces denominada proveedor de servicios) mediante SAML. Se realiza una solicitud (a Node o de otro modo) para crear una solicitud de autorización de SAML.
- Se construye una solicitud de autorización. Esta solicitud de autorización es XML (ver más en OneLogin), codificada y/o encriptada y adjuntada a una URL como un parámetro de consulta. El nodo redirige el navegador a esta URL (algo así como https://domain.onelogin.com/trust/saml2/http-post/sso/123456?SAMLRequest=…encodedXML…).
- OneLogin, como proveedor de identidad, determina a partir de la sesión del navegador si el usuario ya ha iniciado sesión. De lo contrario, se solicita al usuario el formulario de inicio de sesión de OneLogin. Si es así, el navegador envía una respuesta SAML a la aplicación (proveedor de servicios). Esta respuesta SAML (nuevamente XML) incluye ciertas propiedades sobre el usuario, como NameID.
- De vuelta en Node, la aplicación verifica la respuesta SAML y completa la autenticación.
Nodo y passport-saml
Passport.js es un middleware de autenticación para Node. Requiere una estrategia, que podría ser algo como passport-local
o, en nuestro caso, passport-saml
.
como el passport-local
La estrategia permite la autenticación de Passport usando nombre de usuario/contraseña, el passport-saml
La estrategia habilita la autenticación de Passport utilizando la sesión del navegador y los valores configurables del proveedor de identidad.
Tiempo passport-saml
cumplió mis propósitos muy bien, sus documentos fueron difíciles de razonar. El ejemplo de configuración no funciona debido a que el proveedor de identidad OpenIdp está inactivo y hay un montón de parámetros configurables.
El principal que me importaba: entryPoint
y path
(o callbackURL
). Solo necesitaba estos dos, que hacen lo siguiente:
entryPoint
es la URL para redirigir con la solicitud de autorización (ver #2 arriba).path
/callbackURL
configure la URL/ruta en el nodo para que se publique la respuesta SAML (consulte el n.° 3 anterior).
Hay un montón de otros parámetros que son importantes y valiosos, pero es posible configurar SAML SSO usando solo estos dos.
Configuración del proveedor de identidad
Finalmente, el propio proveedor de identidad debe configurarse para que, dada una solicitud de autorización de SAML, sepa dónde enviar la respuesta de SAML. En el caso de OneLogin, eso significa configurar un ACS (Consumer) URL
y un ACS (Consumer) URL Validator
los cuales deben coincidir con el path
/callbackURL
configurado para pasaporte-saml.
Se pueden configurar otras cosas (para admitir el cierre de sesión y otras funciones), pero esto es lo mínimo para autenticarse.
Resumen
La pregunta original constaba de dos partes: (1) cómo implementar la integración SAML/ADFS y (2) la guía de implementación SAML node.js de alto nivel. Esta respuesta aborda la segunda.
En cuanto a la integración específica con Active Directory, recomiendo los documentos de pasaporte-saml en ADFS, teniendo en cuenta que hay dos partes: configurar pasaporte-saml para usar un proveedor de identidad ADFS Y configurar su servidor ADFS para responder a Node.
Reseñas y valoraciones
Recuerda que puedes dar difusión a este post si te valió la pena.