4 puntos de integración
1. SSO via OIDC
Configuración:
- Google Cloud Console > APIs & Services > Credentials > Create Credentials > OAuth 2.0 Client ID
- Application type: Web application
- Authorized redirect URI:
https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback - Copia Client ID + Client Secret
- Studeia > Settings > SSO > Add Provider > OIDC
- Discovery URL:
https://accounts.google.com/.well-known/openid-configuration(auto-fetch) - Allowed domains: ej:
@escuela.edu(anti-shadow accounts)
El aprovisionamiento JIT crea el usuario automáticamente en el primer inicio de sesión. Atributos mapeados: name, email, role.
2. Google Drive sync (biblioteca de medios)
Configuración:
- Google Cloud Console > APIs > habilitar Drive API + Google Picker API
- Mismo OAuth Client (o crear uno dedicado) + una browser API key restringida a la Picker API
- Scope:
https://www.googleapis.com/auth/drive.file(non-sensitive — acceso solo a archivos creados por Studeia + elegidos por el usuario en el Google Picker). No usamos el scope restricteddrive(requiere evaluación CASA + recertificación anual) - Studeia > Settings > Integrations > Google Drive > Connect
- Flujo de consent OAuth del propio usuario
- Studeia almacena tokens cifrados con AES-256-GCM
Funcionalidades (DriveIntegration + DriveSyncEngine):
- Import: el admin elige los archivos con el Google Picker (multiselección) → MediaAsset en Studeia
- Export: MediaAsset → Drive (archivos creados por la app)
- Backup: snapshot completo de los MediaAssets en una carpeta de Drive
Con
drive.filela app no descubre automáticamente archivos externos nuevos en una carpeta. Por eso el sync bidireccional automático de carpeta existe solo para OneDrive (Microsoft Files.ReadWrite.All); en Google, importa con el Picker cuando haya material nuevo. El cron/api/cron/drive-synccubre el sync de carpeta de OneDrive y el export en Google.
3. Google Calendar (clases en vivo)
Configuración: mismo OAuth Client, habilitar Calendar API.
Funcionalidades:
- Cuando el admin crea una LiveClass en Studeia → se crea un evento de Calendar para todos los alumnos del grupo
- Cambio de horario → actualiza el evento de Calendar
- Cancelación → elimina el evento
- El alumno ve la clase en Google Calendar del móvil (notificaciones nativas)
4. Google Meet (proveedor de video)
Configuración:
- Google Cloud Console > APIs > Habilitar Calendar API + Meet REST API v2
- OAuth 2.0 Client (el mismo que los anteriores)
- Studeia > Settings > Video Provider > Google Meet > Connect
- Flujo de admin consent
Cómo funciona:
- LiveClass creada con videoProvider=google_meet
- Studeia crea un evento de Calendar con conferenceData (genera el enlace de Meet automáticamente)
- El alumno accede via joinMethod=external (nueva pestaña, abre la app/web de Meet)
Limitación: endMeeting no está soportado via API — el adaptador lo marca como completed localmente. Limitación: grabación/transcripción iniciada manualmente por el host (Google no expone API para iniciar grabación automáticamente).
Configuración completa (30 minutos)
| Paso | Tiempo |
|---|---|
| 1. Habilitar 4 APIs en Google Cloud Console | 5min |
| 2. Crear OAuth 2.0 Client (web app) | 3min |
| 3. Configurar SSO en Studeia | 5min |
| 4. Conectar Drive + Calendar + Meet en Studeia | 10min |
| 5. Validar con 1 usuario de prueba | 5min |
| 6. Comunicar a profesores/alumnos | 2min |
Solución de problemas
Error "Token expired"
Los tokens OAuth de Google expiran cada hora. Studeia almacena refreshToken y renueva automáticamente. Si el error persiste: re-autorizar via Settings > Integrations > Disconnect + Reconnect.
Drive sync lento
La Drive API tiene cuotas (1000 req/100s/user). Para más de 5000 archivos por hora, considera:
- Filtrar carpetas específicas (no la raíz completa)
- Aumentar el intervalo del cron (ej: cada 2h en lugar de 30min)
Meet sin botón "Grabar"
Solo el host (organizador de la reunión) puede iniciar la grabación. Studeia define organizer = profesor configurado. Si otro usuario inició la reunión: Meet bloquea la grabación.
Consideraciones de privacidad de datos
- Tokens OAuth cifrados con AES-256-GCM (regla crítica 15)
- OAuth state HMAC-SHA256 + nonce Redis 15min (anti-replay)
- Drive sync respeta scopes mínimos (drive.file recomendado vs drive completo)