SSO con Microsoft Entra ID como emblema holográfico azul de cuatro cuadrados que abre varios portales naranjas
Software / APIsDesarrollo Web

SSO con Microsoft Entra ID en Aplicaciones Internas

Codezone
Codezone Empresa de Desarrollo Web y Software a Medida

El SSO con Microsoft Entra ID permite que tu equipo entre en las aplicaciones internas con la misma cuenta corporativa de Microsoft que ya usa, sin contraseñas nuevas. En una aplicación a medida, usa OpenID Connect; deja SAML para aplicaciones que ya lo implementan. La aplicación delega el login y recibe un token con los roles del usuario. Lo integramos en nuestro desarrollo de aplicaciones internas en Madrid.

Cada aplicación con usuario y contraseña propios es una cuenta más que crear el primer día y otra que alguien olvida desactivar cuando la persona se va. Una baja que no llega al panel de una herramienta interna deja a un exempleado con acceso a datos de clientes hasta que alguien lo revisa.

Al terminar sabrás qué protocolo usar y qué validar en el backend; los fundamentos de sesiones y firmas los tienes en la guía de tokens y autenticación segura.

Qué es el SSO con Microsoft Entra ID

El SSO con Microsoft Entra ID es un esquema en el que tu aplicación no guarda contraseñas: redirige al usuario a Entra ID, que lo autentica con la política de la empresa y devuelve un token firmado con su identidad y sus roles. Entra ID es el servicio de identidad en la nube de Microsoft, antes Azure Active Directory.

Si la aplicación es un producto que vendes a otras empresas, cada cliente traerá su propio directorio y el diseño se cruza con la arquitectura SaaS multi-tenant y su aislamiento.

Puerta holográfica azul con un emblema de cuatro cuadrados flotando sobre ella, abriendo paso a varios portales naranjas
Una sola puerta de entrada para todas las aplicaciones internas

OpenID Connect o SAML en una aplicación interna

Microsoft recomienda OpenID Connect y OAuth 2.0 cuando la aplicación los soporta, y SAML para aplicaciones existentes que no usan ninguno de los dos.

  • OpenID Connect: Formato: token JWT. Encaja con: aplicaciones web nuevas y sus APIs. Librerías: MSAL, la biblioteca oficial de Microsoft, disponible para .NET, JavaScript, Node, Python y Java.
  • SAML: Formato: aserción XML con los datos del usuario. Encaja con: software empresarial que ya trae SAML de serie y no soporta OpenID Connect.

Registro de la aplicación, roles y grupos

Registrar la aplicación en Entra ID crea una relación de confianza unidireccional: tu aplicación confía en la plataforma de identidad de Microsoft y no al revés.

  • Registro: para una herramienta interna, Microsoft recomienda el tipo de cuenta de un solo inquilino. Obtienes el Application (client) ID que tu código usa para validar tokens.
  • Roles de aplicación: se definen en el registro, viajan con la aplicación y llegan en el claim `roles`. Desde Aplicaciones empresariales asignas usuarios o grupos enteros a cada rol.
  • Grupos: pertenecen al directorio, no a la aplicación. Si un usuario está en demasiados grupos, el token no los incluye y hay que consultarlos en Microsoft Graph. Por eso autorizamos por roles de aplicación.

Con roles en el token, el panel de administración de tu herramienta interna deja de gestionar permisos a mano, y una intranet corporativa conectada a tu directorio muestra a cada departamento solo lo suyo.

Árbol holográfico azul cuyas ramas se iluminan en naranja solo en ciertos nodos, flotando entre partículas de cristal
Los roles de aplicación deciden qué rama del sistema ve cada persona

Altas, bajas, MFA y acceso condicional

Con SSO, deshabilitar a una persona en Entra ID bloquea sus nuevos inicios de sesión en todas las aplicaciones conectadas.

  • Bajas: los tokens ya emitidos siguen siendo válidos hasta caducar, entre 60 y 90 minutos por defecto según la documentación de tokens de acceso de Microsoft. Para cortes inmediatos, comprueba el estado del usuario en operaciones sensibles.
  • Aprovisionamiento con SCIM: el servicio de aprovisionamiento de Entra ID crea y desactiva cuentas en la aplicación y las mantiene al día. Las apps de su galería usan normalmente SCIM 2.0; la tuya necesita un endpoint SCIM si guarda usuarios propios.
  • MFA y acceso condicional: tu aplicación hereda la política de la empresa. El acceso condicional de Microsoft Entra funciona con reglas si-entonces, como exigir MFA fuera de la oficina, y requiere licencias Microsoft Entra ID P1.

El SSO resuelve la identidad; el resto de controles de seguridad web según OWASP siguen siendo tuyos, igual que la protección de datos desde el diseño del RGPD.

Ficha holográfica azul atravesando un anillo de escaneo naranja, con líneas brillantes abstractas sin nada legible
El backend comprueba firma, emisor, audiencia y rol antes de responder
CodeZone Pro Tip: este middleware valida en un backend Node un token de acceso de Entra ID con la librería `jose`, comprobando firma, emisor, audiencia y rol de aplicación.
import { createRemoteJWKSet, jwtVerify } from 'jose';

const TENANT_ID = process.env.ENTRA_TENANT_ID;          // Directory (tenant) ID
const API_CLIENT_ID = process.env.ENTRA_API_CLIENT_ID;  // Application (client) ID de la API

// JWKS publicado por Entra ID; jose lo cachea y lo recarga si aparece un kid nuevo
const JWKS = createRemoteJWKSet(
  new URL(`https://login.microsoftonline.com/${TENANT_ID}/discovery/v2.0/keys`)
);

export async function verificarTokenEntra(authorization, rolRequerido) {
  const [esquema, token] = (authorization ?? '').split(' ');
  if (esquema !== 'Bearer' || !token) throw new Error('Falta el token Bearer');

  const { payload } = await jwtVerify(token, JWKS, {
    // Tokens v2.0 (requestedAccessTokenVersion = 2 en el manifiesto de la API)
    issuer: `https://login.microsoftonline.com/${TENANT_ID}/v2.0`,
    // En v2.0 el aud es siempre el client ID de la API: rechaza tokens de otras apps
    audience: API_CLIENT_ID,
    algorithms: ['RS256'],
  });

  // Defensa extra si alguien cambia la app a multiinquilino sin avisar
  if (payload.tid !== TENANT_ID) throw new Error('Tenant no permitido');

  // Roles de aplicación asignados en Entra ID a la persona o a su grupo
  const roles = Array.isArray(payload.roles) ? payload.roles : [];
  if (!roles.includes(rolRequerido)) throw new Error(`Sin el rol ${rolRequerido}`);

  // oid es inmutable: úsalo como identificador del usuario en tu base de datos
  return { usuarioId: payload.oid, roles };
}

Validar la audiencia evita aceptar un token emitido para otra aplicación, y exigir el rol en el servidor impide que alguien sin permiso apruebe una factura llamando a la API directamente. El `oid` es el dato que guardas como usuario en la base que hayas elegido entre PostgreSQL, MySQL o MongoDB para la app interna. Para tu negocio, son altas y bajas gestionadas en un solo sitio.

El Riesgo de Mantener Contraseñas Propias en Cada Aplicación

Cada base de usuarios aislada es una lista de accesos que alguien debe revisar a mano y un formulario de login más que proteger. Con Entra ID, la empresa aplica una sola política y Recursos Humanos da de baja una vez. Para usuarios externos, como en un portal de clientes con acceso propio, el diseño de identidad es otro.

Candados holográficos naranjas dispersos que convergen en un único núcleo azul brillante sobre un suelo reflectante
Una política de acceso en lugar de una contraseña por aplicación

Si tus herramientas internas siguen con usuarios y contraseñas propios, cuéntanos qué aplicaciones quieres conectar a Entra ID y te proponemos el plan de integración.