sso single net library for explained example asp node.js single-sign-on saml-2.0 adfs

node.js - single - saml sso explained



¿Guía de implementación de node.js de SAML/ADFS? (2)

Me gustaría adelantar esto diciendo que hasta ahora, ni siquiera había oído hablar de SAML, y mucho menos había desarrollado una estrategia de SSO que lo involucrara. Eso, combinado con el hecho de que apenas he estado haciendo node por un año, es un glorioso sándwich para novatos. Actualmente, tengo un cliente que usa SAML y ADFS como su proveedor de SSO. Ya estoy usando pasaporte.js para inicios de sesión locales, así que usar pasaporte-saml parece ser el camino a seguir para implementar el SSO usando SAML / ADFS. Al hacer mi investigación, he encontrado un par de guías de implementación diferentes, pero dado que, literalmente, no sé nada sobre este proceso, podría usar algunas sugerencias.

En la documentación de pasaporte-saml, encontré lo siguiente para una estrategia probada para trabajar con ADFS (de acuerdo con los documentos):

{ entryPoint: ''https://ad.example.net/adfs/ls/'', issuer: ''https://your-app.example.net/login/callback'', callbackUrl: ''https://your-app.example.net/login/callback'', cert: ''MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W=='', identifierFormat: null }

Supongo que mi pregunta principal es de dónde viene este certificado. ¿Es esto un certificado que genero en mi servidor a través de SSL? ¿El proveedor lo proporciona?

En mi búsqueda, también he encontrado esto: https://github.com/auth0/passport-wsfed-saml2 , que se basa en pasaporte-saml. Se sugiere la siguiente configuración para ADFS:

{ path: ''/login/callback'', realm: ''urn:node:app'', homeRealm: '''', // optionally specify an identity provider identityProviderUrl: ''https://auth10-dev.accesscontrol.windows.net/v2/wsfederation'', cert: ''MIIDFjCCAf6gAwIBAgIQDRRprj9lv5 ... ='' }

En este ejemplo, el objeto de ruta es obvio, y mi proveedor ya me ha proporcionado un providerURL. Pero el reino no tiene sentido para mí, y está ese condenado certificado de nuevo.

¿Podría alguien proporcionarme una forma de "explicar como si fuera un cinco" para implementar SAML / ADFS SSO en un sitio node.js? ¿O ayudarme a hacer las colas o las colas del argumento de los objetos solicitados por las dos soluciones que he delineado? ¡Muy apreciado de antemano!


Podría estar equivocado aquí, pero creo que proviene del servidor XML de ADFS que se encuentra en https://servername/FederationMetadata/2007-06/FederationMetadata.xml .

Extraiga el certificado X509. Tengo los mismos problemas y voy a intentar eso a continuación.


Recientemente realicé el mismo proceso de pensamiento: al no haber oído hablar de SAML , necesitaba habilitar una aplicación web para que se autenticara 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 de la biblioteca passport-saml , las cuales recomiendo, aunque no estoy afiliado a ninguna de ellas.

Lo que me di cuenta fue que la confusión era triple:

(1) cómo funciona SAML,

(2) cómo funciona la biblioteca passport-saml en Node, y

(3) cómo configurar el proveedor de identidad ( OneLogin , Active Directory u otro). 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 la sesión de su navegador. Hay mucho que hacer, 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 SAML funciona es un poco más complicada. Encontré útil esta visión general de OneLogin y el diagrama adjunto:

El diagrama representa el siguiente proceso:

  1. El usuario hace clic en un botón para autenticarse para una aplicación determinada (a veces llamado proveedor de servicios) usando SAML. Se realiza una solicitud (a Node o de otro modo) para crear una solicitud de autorización de SAML.
  2. Se construye una solicitud de autorización. Esta solicitud de autorización es XML ( ver más en OneLogin ), codificada y / o encriptada, y anexada a una URL como parámetro de consulta. Node redirige el navegador a esta URL (algo así como https://domain.onelogin.com/trust/saml2/http-post/sso/123456?SAMLRequest=...encodedXML.. ).
  3. OneLogin , como proveedor de identidad, determina a partir de la sesión del navegador si el usuario ya inició sesión. De lo contrario, se le 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 (de nuevo XML) incluye ciertas propiedades sobre el usuario, como NameID.
  4. De vuelta en el nodo, la aplicación verifica la respuesta de 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 así como passport-local o, en nuestro caso, passport-saml .

Como la estrategia de passport-local habilita la autenticación de pasaportes usando el nombre de usuario / contraseña, la estrategia passport-saml habilita la autenticación de pasaporte usando la sesión del navegador y los valores del proveedor de identidad configurable.

Mientras passport-saml sirvió 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 identidades OpenIdp está inactivo y hay muchos 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 a la que redirigir con la solicitud de autorización (ver # 2 arriba).
  • path / callbackURL establece la URL / ruta en Nodo para que la respuesta SAML sea POSTed (vea # 3 arriba).

Hay muchos 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 SAML, sepa dónde enviar la respuesta SAML. En el caso de OneLogin, eso significa configurar un ACS (Consumer) URL y un ACS (Consumer) URL Validator , los cuales deben coincidir con la path / callbackURL configurada para pasaporte-saml.

Se pueden configurar otras cosas (para admitir el cierre de sesión y otras funciones), pero este es el mínimo indispensable para autenticarse.

Resumen

La pregunta original tenía dos partes: (1) cómo implementar la integración de SAML / ADFS y (2) la guía de implementación de alto nivel node.js de SAML. Esta respuesta se dirige al segundo.

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 al nodo.