Lección 3 de 411 min
SAML 2.0 y LDAP
El inicio de sesión único de las empresas y los directorios donde viven sus usuarios.
Ana entra a trabajar, enciende su portátil de empresa e inicia sesión. Durante el día abre el CRM, el portal de recursos humanos, la herramienta de gastos y la wiki interna, y no vuelve a escribir su contraseña ni una vez. Cuando deje la empresa, el departamento de sistemas desactivará su cuenta en un solo sitio y perderá el acceso a todo a la vez.
Detrás de esa experiencia suele haber dos piezas veteranas del mundo empresarial: SAML 2.0, el protocolo con el que las aplicaciones confían en un proveedor de identidad central, y LDAP, el protocolo de los directorios donde viven los usuarios y los grupos, con Active Directory de Microsoft como el directorio más extendido. Si vendes software a empresas, tarde o temprano te pedirán integrarte con ellos.
Inicio de sesión único
Single sign-on (SSO)
Inicias sesión una vez en un proveedor central y entras en todas las aplicaciones.
- Protocolos:
- SAML 2.0, OpenID Connect
- Siglas:
- SSO
Con single sign-on, las aplicaciones no gestionan contraseñas: delegan la autenticación en un proveedor de identidad (IdP) en el que confían. Cuando entras en una app, esta te redirige al IdP; si ya tenías sesión abierta allí, vuelves al instante con una prueba firmada de quién eres.
Para la empresa, las ventajas son enormes: una sola contraseña que proteger con MFA, un único sitio donde dar de alta y de baja, y un registro central de quién entra en qué. Para el usuario, menos contraseñas que recordar.
Úsalo cuando
En cualquier organización con varias aplicaciones, y en cualquier producto que vendas a empresas: el SSO suele ser un requisito de compra.
Ten en cuenta
El IdP se convierte en la llave de todo: si cae, nadie entra en nada, y si alguien roba una sesión, accede a todas las apps. Protégelo con MFA y vigílalo más que nada.
SAML 2.0
SAML (Security Assertion Markup Language) intercambia afirmaciones de identidad en XML entre dos partes: el proveedor de identidad (IdP), que autentica al usuario, y el proveedor de servicio (SP), la aplicación a la que quiere entrar.
SAML 2.0 y las aserciones
El IdP firma un documento XML que dice quién es el usuario; la app lo verifica.
- Mantiene:
- OASIS
- Desde:
- 2005
- Formato:
- XML
El corazón de SAML es la aserción (assertion): un documento XML que el IdP genera tras autenticar al usuario. Dice quién es (NameID), quién la emite (Issuer), para qué aplicación es (Audience), durante cuánto tiempo vale (Conditions) y, opcionalmente, atributos como el departamento o los grupos.
La aserción va firmada con XML Signature usando la clave privada del IdP, y el SP la verifica con el certificado público del IdP que configuró de antemano. El documento viaja a través del navegador del usuario, normalmente en un formulario que se envía solo por POST a la URL del SP llamada ACS (Assertion Consumer Service).
Úsalo cuando
Para integrarte con el IdP corporativo de un cliente empresarial que use SAML, algo todavía muy habitual en grandes organizaciones.
Ten en cuenta
Nunca valides SAML a mano: las firmas XML son delicadas y han sufrido ataques como el «XML signature wrapping». Usa una librería madura y comprueba firma, Audience, plazos y el InResponseTo de la respuesta.
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
ID="_a1b2c3" IssueInstant="2026-11-07T09:00:00Z" Version="2.0">
<saml:Issuer>https://idp.empresa.com</saml:Issuer>
<ds:Signature>…</ds:Signature>
<saml:Subject>
<saml:NameID>ana@empresa.com</saml:NameID>
</saml:Subject>
<saml:Conditions NotBefore="2026-11-07T09:00:00Z" NotOnOrAfter="2026-11-07T09:05:00Z">
<saml:AudienceRestriction>
<saml:Audience>https://app.ejemplo.com</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
<saml:AttributeStatement>
<saml:Attribute Name="departamento"><saml:AttributeValue>Ventas</saml:AttributeValue></saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>Flujo iniciado por el SP
El usuario entra en la app y esta lo manda al IdP con una petición firmada.
El usuario abre directamente app.ejemplo.com. La app no sabe quién es, así que genera un AuthnRequest (petición de autenticación) y redirige el navegador al IdP. El IdP autentica al usuario, si no tenía ya sesión, y devuelve la respuesta con la aserción a la URL ACS de la app.
La respuesta lleva un InResponseTo que coincide con el id de la petición, así que la app sabe que responde a algo que ella pidió. El parámetro RelayState sirve para recordar a qué página quería ir el usuario.
Úsalo cuando
Como flujo principal: cuando el usuario llega por un marcador, un enlace en un correo o escribiendo la dirección de la app.
Ten en cuenta
Comprueba que cada InResponseTo corresponde a una petición tuya pendiente y que no se ha usado antes. Si no, alguien podría reenviar una respuesta capturada.
1. Navegador → app.ejemplo.com/informes (sin sesión)
2. App → redirige a idp.empresa.com/sso?SAMLRequest=…&RelayState=/informes
3. IdP → pide usuario y contraseña (o reutiliza la sesión)
4. IdP → formulario POST con SAMLResponse a app.ejemplo.com/saml/acs
5. App → valida la aserción, crea la sesión y redirige a /informesFlujo iniciado por el IdP
El usuario parte del portal del IdP y pulsa el icono de la aplicación.
Muchas empresas ofrecen un portal con un icono por cada aplicación. Al pulsar uno, el IdP genera directamente una respuesta SAML y la envía a la URL ACS de la app, sin que la app haya pedido nada. Es cómodo para el usuario: todas sus herramientas en una sola página.
Úsalo cuando
Cuando la empresa cliente lo pide porque sus empleados trabajan desde ese portal. Suele ofrecerse además del flujo iniciado por el SP, no en su lugar.
Ten en cuenta
Como la respuesta no responde a ninguna petición, no hay InResponseTo que comprobar, y es más fácil colar una respuesta robada o forzar a alguien a iniciar sesión con otra cuenta. Si puedes, acepta solo el flujo iniciado por el SP, o haz que el portal enlace a tu app para que esta lo inicie.
Metadatos SAML
Un XML que describe a cada parte: identificador, URLs y certificados.
Antes de que funcione el primer inicio de sesión, el IdP y el SP tienen que conocerse. Cada uno publica sus metadatos: un documento XML con su identificador único (entityID), sus URLs (la de inicio de sesión del IdP, la ACS del SP) y los certificados con los que firma.
Lo normal es intercambiar las URLs de metadatos en lugar de copiar valores a mano. Así, cuando el IdP renueva su certificado, el SP puede leer el nuevo de los metadatos.
Úsalo cuando
Al dar de alta una integración SAML con un cliente: le pasas tu URL de metadatos y te pasa la suya.
Ten en cuenta
Los certificados de firma caducan. Si tu app no lee los metadatos del IdP periódicamente, apunta la fecha de caducidad: el día que el cliente rote su certificado, todos sus usuarios dejarán de poder entrar.
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
entityID="https://app.ejemplo.com">
<md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:AssertionConsumerService index="0"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="https://app.ejemplo.com/saml/acs" />
</md:SPSSODescriptor>
</md:EntityDescriptor>Directorios: LDAP y Active Directory
Un IdP necesita consultar en algún sitio quiénes son los usuarios, sus contraseñas y sus grupos. En las empresas, ese sitio suele ser un directorio: una base de datos optimizada para lecturas y organizada como un árbol.
LDAP y el árbol del directorio
Un protocolo para consultar directorios organizados como un árbol de entradas.
- Versión:
- LDAPv3
- Puertos:
- 389 y 636 (LDAPS)
LDAP (Lightweight Directory Access Protocol) es el protocolo estándar para leer y modificar directorios. Los datos forman un árbol, el DIT (Directory Information Tree): en la raíz va el dominio de la empresa, debajo unidades organizativas como personas o grupos, y en las hojas, cada usuario.
Cada entrada se identifica por su DN (Distinguished Name), la ruta desde la hoja hasta la raíz: uid=ana,ou=personas,dc=empresa,dc=com. Cada entrada tiene atributos (cn, mail, telephoneNumber) y una o más objectClass que dicen qué atributos admite.
Úsalo cuando
Para mantener usuarios, grupos y equipos en un sitio central que consultan muchos sistemas: servidores Linux, VPN, impresoras, aplicaciones internas o el propio IdP.
Ten en cuenta
LDAP sin cifrar envía las contraseñas en claro. Usa siempre LDAPS (LDAP sobre TLS) o StartTLS.
dc=empresa,dc=com
├── ou=personas
│ ├── uid=ana → cn: Ana García, mail: ana@empresa.com
│ └── uid=luis → cn: Luis Pérez, mail: luis@empresa.com
└── ou=grupos
└── cn=ventas → member: uid=ana,ou=personas,dc=empresa,dc=comBind y filtros de búsqueda
Autenticarse ante el directorio y buscar entradas con filtros en notación prefija.
La operación bind autentica la conexión: envías un DN y su contraseña, y el directorio responde si son correctos. Muchas apps antiguas verifican así el login: buscan el DN del usuario por su email con una cuenta de servicio y después hacen bind con ese DN y la contraseña que ha escrito.
Las búsquedas indican una base (desde qué rama), un alcance y un filtro entre paréntesis con el operador delante: (&(a)(b)) es «a y b», (|(a)(b)) es «a o b», (!(a)) es «no a», y * funciona como comodín: (cn=Ana*).
Úsalo cuando
Para integrar una aplicación interna con el directorio: comprobar contraseñas, buscar usuarios o saber a qué grupos pertenece alguien.
Ten en cuenta
Si construyes un filtro con texto del usuario, escapa los caracteres especiales (*, (, ), \): si no, sufrirás una inyección LDAP, el equivalente a la inyección SQL. Y recuerda que con bind tu app ve la contraseña del usuario, algo que con SAML u OIDC no ocurre.
ldapsearch -H ldaps://ldap.empresa.com \
-D "uid=app-intranet,ou=servicios,dc=empresa,dc=com" -W \
-b "ou=personas,dc=empresa,dc=com" \
"(&(objectClass=inetOrgPerson)(|(ou=Ventas)(ou=Marketing)))" cn mailActive Directory
El directorio de Microsoft para redes Windows, que habla LDAP y Kerberos.
- De:
- Microsoft
- Protocolos:
- LDAP y Kerberos
Active Directory (AD) es el servicio de directorio de Microsoft, presente en la mayoría de empresas con equipos Windows. Organiza usuarios, grupos y equipos en dominios, que se agrupan en bosques, y lo sirven unos servidores llamados controladores de dominio. Con las directivas de grupo (Group Policy) se configuran a la vez miles de equipos.
AD habla LDAP, así que cualquier herramienta LDAP puede consultarlo, y usa Kerberos para autenticar: al iniciar sesión en un equipo del dominio recibes un ticket con el que entras en carpetas compartidas, impresoras y apps internas sin volver a escribir la contraseña. Para federarse con aplicaciones web por SAML, se apoya en servicios como AD FS o en Microsoft Entra ID, que verás en la próxima lección.
Úsalo cuando
Es lo que encontrarás en la red interna de casi cualquier empresa grande. Tu app interna puede autenticar contra él por LDAP o, mejor, a través de un IdP conectado a él.
Ten en cuenta
AD local no es lo mismo que Microsoft Entra ID, aunque este se llamara antes Azure AD: uno vive en la red de la empresa y habla LDAP y Kerberos; el otro está en la nube y habla OAuth, OIDC y SAML.
dn: CN=Ana García,OU=Ventas,DC=empresa,DC=local
sAMAccountName: agarcia
userPrincipalName: ana@empresa.com
memberOf: CN=Ventas-España,OU=Grupos,DC=empresa,DC=localNota
No confundas los papeles: LDAP y Active Directory guardan las identidades; SAML y OpenID Connect las transportan hasta las aplicaciones. Un IdP típico lee los usuarios del directorio y habla SAML u OIDC con las apps.
Interactivo
SAML, OpenID Connect y LDAP: qué resuelve cada uno
Activa o desactiva opciones para compararlas cara a cara.
| Característica | SAML 2.0 | OpenID Connect | LDAP |
|---|---|---|---|
| Qué resuelve | SSO entre un IdP y aplicaciones | SSO e identidad sobre OAuth 2.0 | Consultar y modificar un directorio |
| Formato | Aserciones XML firmadas | JWT (ID token) y JSON | Entradas con atributos en un árbol |
| Por dónde viaja | Redirecciones y formularios en el navegador | Redirecciones en el navegador y APIs HTTP | Conexión directa de la app al directorio |
| ¿La app ve la contraseña? | No | No | Sí, si autentica con bind |
| Uso típico | Aplicaciones web empresariales | Apps web, SPAs y móviles modernas | Redes internas, servidores, Active Directory |
Ponlo en práctica
Saber qué es cada cosa es la mitad del trabajo. La otra mitad es reconocer cuándo usarla.
Interactivo
¿Qué usarías?
Lee cada situación y elige la opción que mejor la resuelve. Fallar aquí no cuenta: es para practicar.
Un banco quiere contratar tu SaaS, pero exige que sus empleados entren con sus credenciales corporativas. Su proveedor de identidad solo admite SAML.
Para recordar
- El SSO delega la autenticación en un proveedor de identidad central: una sesión, todas las aplicaciones.
- En SAML, el IdP firma una aserción XML que viaja por el navegador hasta la URL ACS del proveedor de servicio.
- El flujo iniciado por el SP es el más seguro; el iniciado por el IdP es cómodo, pero sus respuestas no solicitadas requieren más cuidado.
- LDAP consulta directorios organizados en árbol; cada entrada tiene un DN, y los filtros usan notación prefija.
- Active Directory es el directorio de Microsoft y habla LDAP y Kerberos; no es lo mismo que Microsoft Entra ID.
Comprueba lo aprendido
Cuestionario
Responde las 5 preguntas para completar la lección.
1.En una integración SAML, ¿cómo sabe el SP que una aserción es auténtica?
2.¿Qué busca este filtro LDAP:
(&(objectClass=person)(|(ou=Ventas)(ou=Marketing)))?3.En el DN
uid=ana,ou=personas,dc=empresa,dc=com, ¿qué parte es la más específica?4.¿Por qué el flujo iniciado por el IdP se considera más delicado que el iniciado por el SP?
5.Una app interna valida el login haciendo bind contra Active Directory. ¿Qué diferencia hay con usar SAML?