Saltar al contenido
Studeia Docs
AI-assisted translation — last updated 2026-05-23. For original (pt-BR or en-US), use the language switcher.

SSO Enterprise: SAML, OIDC y SCIM 2.0

Studeia Enterprise: SAML 2.0, OIDC con PKCE, SCIM 2.0 (14 endpoints RFC 7644), JIT provisioning y group-to-course mapping. Integra Okta, Azure AD, Google Workspace y cualquier IdP estándar

2026-05-23 8 min
Resposta curta

El plan Enterprise de Studeia soporta SAML 2.0 (mediante node-saml), OIDC con PKCE y SCIM 2.0 (14 endpoints RFC 7644). El JIT provisioning crea usuarios en el primer inicio de sesión, el group-to-course mapping matricula automáticamente a los alumnos en cursos cuando el IdP los agrega al grupo, el Bearer token SCIM está cifrado con AES-256-GCM y todos los eventos se auditan en ScimAuditLog. Integra con Okta, Azure AD, Google Workspace y cualquier IdP estándar.

Requisitos previos

  • Plan Enterprise (verificado en la ruta /api/auth/sso/[tenantSlug] — otros planes devuelven 403)
  • Dominio configurado (white-label opcional pero recomendado)
  • Acceso de administrador al IdP (Okta, Azure AD, Google Workspace, Ping, OneLogin, etc.)

SAML 2.0

Configuración

Settings > SSO > Add Provider > SAML

Campos:

  • Display name — nombre que aparece en el botón "Sign in with..."
  • Metadata XML URL O Metadata XML pegado — proporcionado por el IdP
  • SP-initiated o IdP-initiated — Studeia soporta ambos
  • Allowed domains — restringe emails (anti-shadow accounts)

Endpoints expuestos

  • ACS (Assertion Consumer Service): /api/auth/sso/[tenantSlug]/saml/callback
  • SP metadata: /api/institution/sso/metadata

Validación

La respuesta SAML se valida mediante node-saml:

  • Verificación de XML signature (anti-tampering)
  • Validación de namespace XML de SAML (anti-XXE)
  • Comprobaciones de NotBefore/NotOnOrAfter
  • Restricción de audiencia (Audience restriction)

OIDC

Configuración

Settings > SSO > Add Provider > OIDC

Campos:

  • Discovery URLhttps://idp.com/.well-known/openid-configuration (auto-fetch)
  • Client ID + Client Secret (cifrado con AES-256-GCM)
  • Scopes — por defecto: openid profile email
  • PKCE — siempre activado (método de desafío S256)

Flujo

  1. El alumno hace clic en "Sign in with [IdP]" → /api/auth/sso/[tenantSlug]/oidc
  2. Redirección al IdP con PKCE challenge + state firmado con HMAC + nonce en Redis (TTL 15min anti-replay)
  3. El IdP autentica → callback /api/auth/sso/[tenantSlug]/oidc/callback
  4. Studeia valida state + nonce, intercambia el code por tokens (PKCE verifier)
  5. Endpoint Userinfo → JIT provisioning (crea User si no existe) → sesión Supabase

SCIM 2.0

14 endpoints RFC 7644

GET    /api/scim/v2/ServiceProviderConfig
GET    /api/scim/v2/ResourceTypes
GET    /api/scim/v2/Schemas

GET    /api/scim/v2/Users           (list, con filter)
POST   /api/scim/v2/Users           (create)
GET    /api/scim/v2/Users/{id}
PUT    /api/scim/v2/Users/{id}      (replace full)
PATCH  /api/scim/v2/Users/{id}      (partial — Microsoft Graph compat)
DELETE /api/scim/v2/Users/{id}      (soft-delete: User.status=suspended)

GET    /api/scim/v2/Groups          (list)
POST   /api/scim/v2/Groups
GET    /api/scim/v2/Groups/{id}
PUT    /api/scim/v2/Groups/{id}
PATCH  /api/scim/v2/Groups/{id}
DELETE /api/scim/v2/Groups/{id}

Configuración en Azure AD (ejemplo)

  1. Azure Portal > Enterprise Applications > Studeia > Provisioning
  2. Provisioning Mode: Automatic
  3. Tenant URL: https://tuapp.studeia.com/api/scim/v2
  4. Secret Token: generado en Studeia en Settings > SSO > SCIM Token (Bearer, cifrado en la base de datos)
  5. Test Connection
  6. Mappings: atributos estándar (compatible con Microsoft Graph)
  7. Settings > Scope: "Sync only assigned users and groups"
  8. Start provisioning

Group → Course mapping

Permite la matrícula automática cuando el IdP agrega un usuario a un grupo:

  1. Configura el mapping en Settings > SSO > Groups
  2. Para cada SsoGroup, elige el Course destino
  3. Cuando SCIM agrega un miembro al grupo → Studeia crea un Enrollment activo en el curso
  4. Cuando lo elimina → cancela la matrícula (status=cancelled)
  5. Grupos grandes (>50 miembros): procesamiento mediante BullMQ (cola scim-group-sync), Response 202 + jobId

Seguridad

Tokens

  • SCIM Bearer token: cifrado con AES-256-GCM en TenantSsoConfig.scimToken — NUNCA en texto plano
  • Tokens OAuth (integración con Google Workspace): mismo estándar
  • State OAuth: HMAC-SHA256 con OAUTH_STATE_SECRET + nonce en Redis (TTL 15min)

JIT provisioning

  • allowedDomains valida el email antes de crear el usuario
  • Atributos del IdP mapeados mediante SsoAttributeMapping
  • Role por defecto configurable (student o teacher)

Auditoría

ScimAuditLog registra:

  • Toda operación SCIM (Create/Update/Delete) con timestamp + IP + actor (IdP) + usuario/grupo afectado + payload (redactado)
  • AdminAuditLog para cambios en SsoConfig realizados por un administrador institucional

Limitaciones

  • LDAP directo (sin SAML/OIDC) no soportado de forma nativa — en el roadmap
  • Just-in-time deprovisioning mediante SAML SLO (Single Logout) parcial — se recomienda usar SCIM para un desaprovisionamiento confiable
  • Autenticación multifactor delegada al IdP (Studeia no gestiona MFA propio cuando SSO está activo)
  • Group nesting (grupos dentro de grupos) soportado parcialmente — se recomienda hacer flatten en el IdP

Ver también

FAQ

¿Studeia soporta SSO con Okta?

Sí, mediante SAML 2.0 u OIDC. Configura en Settings > SSO > Add Provider, elige SAML u OIDC, pega el metadata XML (SAML) o la discovery URL (OIDC). El JIT provisioning crea usuarios automáticamente en el primer inicio de sesión.

¿Qué protocolos SSO soporta Studeia?

SAML 2.0 (mediante node-saml, valida XML signature, soporte para SP-initiated e IdP-initiated), OIDC con Authorization Code + PKCE + discovery automática, SCIM 2.0 para aprovisionamiento (RFC 7644 — endpoints de Users + Groups + ServiceProviderConfig).

¿SCIM 2.0 funciona con Azure AD?

Sí. Studeia expone /api/scim/v2/Users + /api/scim/v2/Groups con autenticación Bearer token. Configura en Azure AD Enterprise Application > Provisioning > Provisioning Mode: Automatic > Tenant URL: https://tuapp.studeia.com/api/scim/v2 > Secret Token: generado en Studeia. Soporta CRUD, soft-delete (User.status=suspended) y operaciones bulk.

¿El group-to-course mapping automático funciona?

Sí. Un SsoGroup puede mapearse a un Course mediante SsoGroupCourseMapping. Cuando el IdP agrega un usuario al grupo, Studeia lo matricula automáticamente en el curso. Cuando lo elimina, cancela la matrícula. Los grupos grandes (>50 miembros) se procesan mediante BullMQ (se devuelve un jobId).

¿Cuál es el tiempo promedio de configuración del SSO?

30-45 minutos para SAML/OIDC + 1-2 horas para el aprovisionamiento SCIM completo. Documentado paso a paso por IdP en /integrations/ (Okta, Azure AD, Google Workspace).

Veja tambem

SSO Enterprise: SAML, OIDC y SCIM 2.0