4 puntos de integración
1. Azure AD SSO (SAML / OIDC)
Configuración OIDC (recomendado):
- Azure Portal > Azure Active Directory > App registrations > New registration
- Redirect URI:
https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback - Certificates & secrets > New client secret
- API permissions:
openid,profile,email - Studeia > Settings > SSO > Add Provider > OIDC
- Discovery URL:
https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration - Client ID + Client Secret del paso 3
Allowed domains: @escuela.edu (prevención de cuentas no autorizadas).
JIT provisioning + atributos mapeados via SsoAttributeMapping.
2. SCIM 2.0 (aprovisionamiento automático)
Configuración:
- Azure Portal > Enterprise Applications > Studeia > Provisioning
- Provisioning Mode: Automatic
- Tenant URL:
https://[tenant].studeia.com/api/scim/v2 - Secret Token: generado en Studeia > Settings > SSO > SCIM Token (cifrado AES-256-GCM)
- Test Connection
- Mappings: predeterminados de Microsoft Graph (firstName, lastName, mail, displayName, accountEnabled, groups)
- Scope: "Sync only assigned users and groups"
- Settings: cycle interval = 40 minutes (predeterminado)
- Start provisioning
Mapeo grupo → curso: Settings > SSO > Groups. Mapee el grupo AD (ej: "Ingeniería 2026.1") a un curso en Studeia. Cuando AD agrega un usuario al grupo, Studeia lo matricula automáticamente.
Grupos grandes (>50 miembros): procesados via BullMQ async (cola scim-group-sync), Response 202 + jobId.
3. Microsoft Teams (proveedor de video)
Configuración:
- Azure AD > App registration > API Permissions > Microsoft Graph:
OnlineMeetings.ReadWrite.AllOnlineMeetingRecording.Read.All- Tipo: Application (no Delegated)
- Admin consent (requiere Global Administrator)
- Studeia > Settings > Video Provider > Teams > Tenant ID + Client ID + Client Secret + correo del organizador
- Auth: Client Credentials flow (sin usuario interactivo)
Webhook: /api/webhooks/video/teams con Graph Change Notifications. Validación de suscripción via retorno de validationToken.
Limitación: endMeeting no está soportado via Graph API — el adaptador lo marca como completado localmente.
4. OneDrive sync (biblioteca de medios)
Mismo estándar que la integración con Drive:
- Modelo DriveIntegration con provider=onedrive
- Tokens OAuth cifrados AES-256-GCM
- Cron
/api/cron/drive-syncsincroniza periódicamente - Operaciones: import / export / sync bidireccional / backup
Configuración completa (1-2 horas)
| Etapa | Tiempo |
|---|---|
| 1. Azure AD App registration | 10 min |
| 2. Configurar API permissions + admin consent | 10 min |
| 3. SSO OIDC en Studeia | 5 min |
| 4. SCIM provisioning | 30-45 min |
| 5. Teams provider | 10 min |
| 6. Integración OneDrive | 10 min |
| 7. Probar con 5 usuarios piloto | 10 min |
Solución de problemas
"AADSTS50011: Reply URL mismatch"
La Redirect URI en Azure AD no coincide con la configurada en Studeia. Verificar coincidencia exacta (sensible a mayúsculas/minúsculas).
SCIM "User not found in directory"
El usuario fue removido del grupo en AD pero Studeia aún lo referencia. Aguardar el próximo ciclo (40 min) o disparar manualmente via Provisioning > Provision on demand.
La reunión de Teams se crea pero sin audio
El correo del organizador en la configuración de Studeia no tiene una licencia de Teams activa. Verificar en el centro de administración de Microsoft 365.
LGPD + GDPR
- Tokens OAuth cifrados AES-256-GCM (regla 15)
- SCIM Bearer token cifrado (regla 85)
- Auditoría completa via ScimAuditLog (regla 89)
- Microsoft DPA aplicable para empresas europeas