Descripción general sobre el inicio de sesión único independiente con SAML 2.0
Este artículo proporciona al cliente una descripción general de cómo configurar el inicio de sesión único con SAML 2.0.
Descripción general de SSO
El Lenguaje de marcado de aserción de seguridad (SAML) permite a los clientes autenticarse contra sus propios sistemas al iniciar sesión en Indeavor. Nuestra implementación utiliza el protocolo SAML 2.0.
SAML es un marco de trabajo basado en XML para la autenticación y autorización entre dos entidades: un proveedor de servicios y un proveedor de identidad. El proveedor de servicios acepta confiar en el proveedor de identidad para autenticar a los usuarios. A cambio, el proveedor de identidad genera una aserción de autenticación, que indica que se ha autenticado a un usuario.
SAML es un formato estándar de inicio de sesión único (SSO). La información de autenticación se intercambia a través de documentos XML firmados digitalmente. Es una implementación compleja de inicio de sesión único (SSO, por sus siglas en inglés) que permite una autenticación transparente, principalmente entre negocios y empresas.
Proveedor de Identidad (IDP)/Parte Asertante: este es el cliente. Una implementación común es Microsoft Active Directory Federated Services (ADFS) o Azure.
Proveedor de servicios (SP)/Parte de confianza: esto es Indeavor.
Indeavor Protip: Indeavor solo admite solicitudes iniciadas por SP.
Configuración del proveedor de identidad
El cliente necesitará nuestros metadatos del proveedor de servicios para agregar Indeavor como parte que confía en su IDP.
Un proveedor de identidad es una entidad del sistema que crea, mantiene y administra la información de identidad de las entidades principales, al tiempo que proporciona servicios de autenticación a las aplicaciones de entidades que confían en una federación o red distribuida.
Un proveedor de identidad ofrece autenticación de usuario como servicio. Al confiar en aplicaciones de parte, como aplicaciones web, se subcontrata el paso de autenticación de usuario a un proveedor de identidad de confianza. Se dice que esa solicitud de parte que confía en el certificado es federada, es decir, consume la identidad federada.
Un proveedor de identidad es "un proveedor de confianza que le permite utilizar el inicio de sesión único (SSO) para acceder a otros sitios web". El SSO mejora la usabilidad al reducir la fatiga de las contraseñas. También proporciona una mejor seguridad al disminuir la posible superficie de ataque.
Específicamente, un proveedor de identidad SAML es una entidad del sistema que emite afirmaciones de autenticación junto con un perfil SSO de SAML. Una parte que confía que consume estas afirmaciones de autenticación se denomina proveedor de servicios SAML.[1]
[1] https://en.wikipedia.org/wiki/Identity_provider
Una URL de Indeavor puede recuperar metadatos:
https://identity.[ENVIROMENTNAME].indeavor.com/saml/metadata.xml
Prácticas recomendadas
- Algoritmo SHA-256
- Indeavor SSO requiere que el campo de identificador único proporcionado por ADFS esté contenido en el bloque Declaración de atributo de la respuesta. La mayoría de los clientes consideran que el uso de la dirección de correo electrónico es el mejor identificador único para lograr este resultado.
- Se requiere que el parámetro "Estado de retransmisión" enviado por Indeavor con la solicitud SAML de autenticación se incluya en la respuesta SAML del Servicio de federación que regresa a Indeavor.
Configuración de Indeavor (Proveedor de servicio)
Un proveedor de servicios SAML es una entidad del sistema que recibe y acepta aserciones de autenticación junto con un perfil de inicio de sesión único (SSO) del Lenguaje de marcado de aserción de seguridad (SAML).
En el modelo de dominio SAML, una parte que confía en SAML es cualquier entidad del sistema que recibe y acepta información de otra entidad del sistema. De particular interés es una parte que confía en SAML que recibe y acepta una declaración de SAML emitida por una autoridad de SAML.
Un tipo importante de autoridad de SAML es el proveedor de identidad SAML, entidad del sistema que emite afirmaciones de autenticación junto con un perfil SSO de SAML. Una parte que confía en esas afirmaciones se denomina proveedor de servicios SAML (o simplemente proveedor de servicios si se entiende el dominio). Por lo tanto, un proveedor de servicios SAML es una entidad del sistema que recibe y acepta una declaración de autenticación emitida por un proveedor de identidad SAML.[1]
[1] https://en.wikipedia.org/wiki/Service_provider_(SAML)
Confirmación
Una confirmación SAML contiene un paquete de información de seguridad
Las confirmaciones de SAML suelen transferirse de proveedores de identidad a proveedores de servicios. Las confirmaciones contienen instrucciones que los proveedores de servicios utilizan para tomar decisiones de control de acceso. SAML proporciona tres tipos de declaraciones:
- Declaraciones de autenticación
- Declaraciones de atributo
- Declaraciones de decisión de autorización
Las declaraciones de autenticación le confirman al proveedor de servicios que la entidad de seguridad se autenticó efectivamente con el proveedor de identidad en un momento determinado mediante un método de autenticación determinado. En una declaración de autenticación se puede revelar otra información acerca del principal autenticado (denominado contexto de autenticación).
Una instrucción de atributo afirma que un sujeto está asociado a ciertos atributos. Un atributo es simplemente un par nombre-valor. Las partes que confían utilizan atributos para tomar decisiones de control de acceso.
En una declaración de decisión de autorización se afirma que se permite a un sujeto realizar la acción A sobre el recurso R que se ha presentado como prueba E. La expresividad de las declaraciones de decisión de autorización en SAML es intencionalmente limitada.[1]
Protocolo
Un protocolo SAML describe cómo se empaquetan ciertos elementos SAML (incluidas las confirmaciones) dentro de los elementos de solicitud y respuesta de SAML, y proporciona las reglas de procesamiento que las entidades SAML deben seguir cuando producen o consumen estos elementos. En su mayor parte, un protocolo SAML es un simple protocolo de solicitud-respuesta.
Los siguientes protocolos se describen en detalle en SAML 2.0 Core:
- Protocolo de solicitud y consulta de confirmaciones
- Protocolo de solicitud de autenticación
- Protocolo de resolución de artefactos
- Protocolo de administración de identificador de nombres
- Protocolo de cierre de sesión único
- Protocolo de asignación de identificadores de nombres[2]
Enlace
Un enlace SAML es una asignación de un mensaje de protocolo SAML a formatos de mensajería estándar o protocolos de comunicaciones. Por ejemplo, el enlace SAML SOAP especifica cómo se encapsula un mensaje SAML en un sobre SOAP, que está enlazado a un mensaje HTTP.
Los enlaces siguientes se describen en SAML:
- Enlace SAML SOAP (basado en SOAP 1.1)
- Enlace de SOAP inverso (PAOS)
- Enlace de redirección HTTP (GET)
- Enlace POST HTTP
- Enlace de artefacto HTTP
- Enlace URI de SAML
Perfil
Un perfil SAML describe detalladamente cómo se combinan las confirmaciones, los protocolos y los enlaces SAML para admitir un caso de uso definido. El perfil SAML más importante es el perfil SSO del navegador web.
Los siguientes protocolos se describen en SAML:
- Perfiles de SSO
- Perfil SSO de explorador web
- Perfil de cliente o proxy mejorado (ECP)
- Perfil de detección de proveedor de identidad
- Perfil de cierre de sesión único
- Perfil de administración del identificador de nombres
- Perfil de resolución de artefacto
- Perfil de solicitud/consulta de aserción
- Perfil de asignación de identificador de nombres
- Perfiles de atributos SAML
Lo que usamos
Para el flujo de trabajo de inicio de sesión utilizamos el "Perfil SSO del navegador web", el enlace que se soporta es "Enlace de redirección HTTP (GET)" (móvil), "Enlace de POST HTTP" (web).
Para el flujo de trabajo de cierre de sesión utilizamos el "Perfil de cierre de sesión único", el enlace que se admite es "Enlace de redirección HTTP (GET)", "Enlace de POST HTTP".
[1] https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
[2] https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
Metadatos
Los metadatos de SAML son datos de configuración necesarios para negociar automáticamente acuerdos entre entidades del sistema, que incluyen identificadores, soporte de enlace y extremos, certificados, claves, funciones criptográficas y políticas de seguridad y privacidad. Varias especificaciones de SAML estandarizan las estructuras y los contenidos de metadatos, lo que permite procesos de administración eficientes para despliegues comercializables.
Como las especificaciones de SAML evolucionaron con el tiempo, las especificaciones relacionadas con los metadatos están contenidas en varios documentos. Este documento no normativo ofrece una descripción general consolidada y vínculos con las especificaciones normativas.[1]
[1] https://www.oasis-open.org/committees/download.php/51890/SAML%20MD%20simplified%20overview.pdf
El SSO debe estar habilitado en Indeavor para que los extremos de metadatos estén disponibles.
Configuraciones ADFS
Extremos
Sugerencia profesional de Indeavor: El SSO debe activarse en su dominio para que el vínculo de metadatos esté disponible.
Web
Metadatos y extremos
URL: https://identity.[ENVIROMENTNAME].indeavor.com/saml/metadata.xml
Descripción: Devuelve los metadatos del proveedor de servicios (vea Descripción de Saml/Metadatos). Si el proveedor SAML no está habilitado para el dominio solicitado, el extremo devuelve 404.
Controlador de consumidor de confirmación
Descripción: Extremo que acepta respuestas de aserción del proveedor de servicios. Implementa la validación de la aserción dada, extrae el nombre de usuario del atributo configurado e inicia sesión en el usuario si es un usuario válido de Indeavor.
Servicio de cierre de sesión único
Descripción: Extremo que acepta solicitudes/respuestas de cierre de sesión del proveedor de servicios. Implementa la validación de las solicitudes/respuestas dadas y cierra la sesión del usuario de Indeavor.
Página de inicio de sesión de SAML
Descripción: La página que implementa el inicio de sesión pensó en el proveedor de identidad SAML. El usuario rellena la entrada de dominio, la aplicación encuentra el proveedor de servicios correcto, crea una solicitud de autenticación y redirige el usuario a SingleSignOnService del proveedor de identidad.
Configuraciones de indexación
Agregar el certificado Indeavor para el cifrado/firma de las solicitudes SAML
- Crear archivo que contiene el certificado SAML, este archivo debe ser accesible desde la aplicación
- Agregue la ruta de acceso del archivo a Data/Config/SamlSSO.config <samlSSOSettings certificate="certificate path" password="file password" />
Ejecutar la aplicación bajo la conexión segura (HTTPS) el proveedor de SAML requiere HTTPS
Configuración de metadatos y patrones de UID en un nivel del sistema
https://support.workloud.com/hc/en-us/articles/115001794466
Crear un perfil de usuario para inicio de sesión único
https://support.workloud.com/hc/en-us/articles/115001796366
Qué esperar
XML
Metadatos del proveedor de identidad
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://idp.cloudroll.gr">
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
...
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
...
</md:KeyDescriptor>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.cloudroll.gr/idp/SingleLogoutService" index="0" isDefault="false"/>
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.cloudroll.gr/idp/SSOService" index="0" isDefault="false"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>
entityID: Identificador único del proveedor de identidad.
IDPSSODescriptor: Contiene información de IdP.
KeyDescriptor: Valor que utiliza la entidad para la firma y cifrado de respuestas.
NameIDFormat: Formato del identificador único del usuario.
SingleSignOnService: URL que utiliza SSO.
SingleLogoutService: La dirección URL que usó la SLO.
Location: La dirección URL del enlace.
Binding: Tipo de respuesta de enlace.
index: El índice del enlace.
isDefault: Si es el servicio de enlace predeterminado para este proceso
Metadatos del proveedor de servicios
<md:EntityDescriptor entityID="https://sp.cloudroll.gr" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
<md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
...
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
...
</md:KeyDescriptor>
<md:ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://sp.cloudroll.gr/Artifact/SOAP" index="1" isDefault="false"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://sp.cloudroll.gr/SLO/SOAP" />
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sp.cloudroll.gr/SLO/POST" />
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sp.cloudroll.gr/SAML2/POST" index="1" />
</md:SPSSODescriptor>
</md:EntityDescriptor>
entityID: Identificador único del proveedor de identidad.
SPSSODescriptor: Contiene información del SP.
KeyDescriptor: Valor que utiliza la entidad para la firma y cifrado de respuestas.
NameIDFormat: Formato del identificador único del usuario.
SingleSignOnService: URL que utiliza SSO.
SingleLogoutService: La dirección URL que usó la SLO.
Location: La dirección URL del enlace.
Binding: Tipo de respuesta de enlace.
Index: El índice del enlace.
isDefault: Si es el servicio de enlace predeterminado para este proceso
Solicitud de autenticación
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="…"
Version="2.0"
IssueInstant="2015-01-31T06:00:00"
AssertionConsumerServiceIndex="0"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST">
<saml:Issuer>www.workloud.com</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
</samlp:AuthnRequest>
ID: El identificador de la solicitud de autenticación.
Issuer: El identificador de los emisores (SP).
Signature: Firma del emisor para comprobar la validez de la solicitud, si se firma el xml.
AssertionConsumerServiceIndex: La dirección URL que devuelve el IDP después de la identificación del usuario.
AssertionConsumerServiceURL: La dirección URL que devuelve el IDP después de la identificación del usuario.
ProtocolBinding: El tipo de respuesta que la confirmación debe ser devuelta.
Confirmación
Este es un ejemplo de confirmación
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0" IssueInstant="2015-01-31T12:00:00Z">
<saml:Issuer>www.workloud.com</saml:Issuer> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"> cloudroll@example.com</saml:NameID>
</saml:Subject>
<saml:Conditions NotBefore="2015-01-31T12:00:00Z" NotOnOrAfter="2015-01-31T12:00:00Z"> </saml:Conditions>
<saml:AuthnStatement
AuthnInstant="2004-12-05T09:22:00"
SessionIndex="b07b804c-7c29-ea16-7300-4f3d6f7928ac">
<saml:AuthnContext>
<saml:AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
<saml:AttributeStatement>
<saml:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1" FriendlyName="eduPersonAffiliation">
<saml:AttributeValue>admin</saml:AttributeValue>
</saml:Attribute> </saml:AttributeStatement>
</saml:Assertion>
La confirmación incluye:
Issuer: El identificador de los emisores (Idp).
Signature: Firma del emisor para comprobar la validez de la solicitud, se firma el xml.
Subject: El identificador de usuario.
AuthnStatement: La reclamación que describe la identidad del usuario.
Conditions: Describe las condiciones de que la confirmación es válida.
AuthnInstant: El momento en que se emitió la afirmación.
SessionIndex: El índice de sesión identificado por IdP.
AuthnContext: El contexto de autenticación utilizado desde IdP para identificar al usuario
AttributeStatement: Incluye los atributos de usuario
Name: Nombre del atributo.
FriendlyName: Nombre descriptivo del atributo.
LogoutRequest
<samlp:LogoutRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="..."
Version="2.0" IssueInstant="2014-07-18T01:13:06Z"
Destination="www.workloud.com/SingleLogoutService">
<saml:Issuer>www.workloud. com </saml:Issuer>
<saml:NameID SPNameQualifier="www.workloud. com " Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">......</saml:NameID>
</samlp:LogoutRequest>
ID: El identificador de la solicitud de autenticación.
Issuer: El identificador de los emisores (SP).
Signature: Firma del emisor para comprobar la validez de la solicitud, si se firma el xml.
IssueInstant: El momento en que se emitió la respuesta de cierre de sesión.
Destination: El servicio web que consume la solicitud.
InResponseTo: Identificador de la solicitud a la que pertenece la respuesta.
NameID: El identificador de usuario al que pertenece la solicitud.
LogoutResponse
<samlp:LogoutResponse
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="...."
Version="2.0"
IssueInstant="2014-07-18T01:13:06Z"
Destination="www.workloud.gr/SingleLogoutService"
InResponseTo="...">
<saml:Issuer>www.workloud.gr</saml:Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
</samlp:LogoutResponse>
ID: El identificador de la solicitud de autenticación.
Issuer: El identificador de los emisores (SP).
Signature: Firma del emisor para comprobar la validez de la solicitud, si se firma el xml.
IssueInstant: El momento en que se emitió la respuesta de cierre de sesión.
Destination: El servicio web que consume la respuesta.
InResponseTo: Identificador de la solicitud a la que pertenece la respuesta.
Status: El estado de la respuesta.
Flujo de trabajo de inicio de sesión web
- Ir a la página de inicio de sesión de SAML
- Seleccione el dominio y pulse el inicio de sesión
- La aplicación crea un formulario de envío automático que contiene estos parámetros
- RelayState es un parámetro que pasó a la IDP y que debería ser devuelto a nuestro SP tal como está. Este parámetro mantiene el nombre de dominio que se requiere de nuestro SP.
Ejemplo de valor RelayState: url=/Default.aspx&dmn=demo - SAMLRequest contiene el código AuthnRequest Base-64. Este valor contiene información acerca del emisor de la solicitud
- RelayState es un parámetro que pasó a la IDP y que debería ser devuelto a nuestro SP tal como está. Este parámetro mantiene el nombre de dominio que se requiere de nuestro SP.
- El usuario se redirigió al proveedor de servicios
- El proveedor valida la solicitud de autenticación
- Pide al usuario que inicie sesión
- El proveedor de identidad emite una afirmación con la información del usuario
- El usuario se redirigió al controlador de consumidor de declaración de Indeavor con la solicitud SAMLResponse y RelayState desde SAML
- El controlador de consumidor de declaración valida la solicitud (firma, expiración, etc.)
- Extrae nombre de usuario para los atributos de confirmaciones
- Inicio de sesión de usuario
Flujo de trabajo de inicio de sesión móvil
- Usuario va a la vista de inicio de sesión
- Seleccione el dominio y pulse el inicio de sesión
- La aplicación crea una dirección URL que contiene estos parámetros
- RelayState es un parámetro que pasó a la IDP y que debería ser devuelto a nuestro SP tal como está. Este parámetro mantiene el nombre de dominio que se requiere de nuestro SP.
Ejemplo de valor RelayState: url=/Default.aspx&dmn=demo - SAMLRequest contiene el código AuthnRequest Base-64. Este valor contiene información acerca del emisor de la solicitud
- RelayState es un parámetro que pasó a la IDP y que debería ser devuelto a nuestro SP tal como está. Este parámetro mantiene el nombre de dominio que se requiere de nuestro SP.
- La aplicación móvil abre una vista web con la URL generada
- El usuario se redirigió al proveedor de servicios
- El proveedor valida la solicitud de autenticación
- Pide al usuario que inicie sesión
- El proveedor de identidad emite una afirmación con la información del usuario
- El usuario se redirigió al controlador de consumidor de declaración de Indeavor con la solicitud SAMLResponse y RelayState desde SAML
- El controlador de consumidor de declaración valida la solicitud (firma, expiración, etc.)
- Extrae nombre de usuario para los atributos de confirmaciones
- Inicio de sesión de usuario