Prerrequisitos
- Moodle 3.10+ (LTI 1.3 nativo)
- Plan Studeia con LTI habilitado (Enterprise o planes de pago)
- Rol de administrador en Moodle
- HTTPS en ambos lados
Configuración
1. Studeia: generar config de herramienta LTI
/institution/lti-tools > New Tool:
- Tool name: "Moodle Production"
- Target Link URI:
https://[tenant].studeia.com/lti/launch - OIDC Login URI:
https://[tenant].studeia.com/lti/login - Public JWKS URL:
https://[tenant].studeia.com/.well-known/jwks.json - Studeia genera Client ID + Deployment ID
2. Moodle: registrar herramienta
- Site administration > Plugins > Activity modules > External tool > Manage tools
- + configure a tool manually
- Tool name: "Studeia"
- Tool URL: del paso 1
- LTI version: LTI 1.3
- Public key type: Keyset URL > URL: JWKS de Studeia
- Initiate login URL: del paso 1
- Redirection URI(s): del paso 1
- Tool configuration usage: Show as preconfigured tool when adding an external tool
- Services > Assignment and Grade Services: Use this service for grade sync and column management
- Services > Names and Role Provisioning: Use this service to retrieve members information
- Guardar
3. Agregar en un curso
- Curso Moodle > Turn editing on > Add an activity > External tool
- Preconfigured tool: Studeia
- Activity name: "Módulo Studeia - CS101"
- Guardar
El alumno hace clic en el enlace > OIDC launch > Studeia inicia sesión via JWT > redirige al módulo.
Cómo funciona
Idéntico al Canvas LTI (misma especificación LTI 1.3):
El alumno hace clic en "Módulo Studeia" en el curso Moodle
↓
Moodle POST /lti/login (Studeia OIDC Login)
↓
Studeia valida + redirige con state + nonce
↓
Moodle redirige al alumno a /lti/launch con JWT id_token
↓
Studeia LtiService.launch():
1. Valida JWT via Moodle JWKS (auto-fetched)
2. Valida nonce (Redis 15min anti-replay)
3. JIT provisioning (User con User.externalId = LTI sub)
4. Crea Enrollment si es necesario
5. Inicia sesión en Studeia
↓
Redirige al módulo/clase
AGS grade passback
El alumno completa un quiz en Studeia
↓
LtiAdvantageService.sendScore() → POST score
↓
Gradebook de Moodle actualizado
Cuándo usar LTI vs IMS CC
| Escenario | Recomendado |
|---|---|
| Mantener Moodle, complementar con Studeia en cursos piloto | LTI |
| Migrar TODO de Moodle a Studeia | IMS CC import (POST /api/institution/courses/import) |
| Un departamento prueba Studeia antes de una decisión institucional | LTI |
| Moodle será discontinuado en 6-12 meses | IMS CC import + ejecución en paralelo durante la migración |
Ventajas de LTI vs migración total
✅ El estudiante usa SSO de Moodle ya existente (Shibboleth, OIDC institucional) ✅ El Gradebook de Moodle sigue siendo la fuente de verdad ✅ Sin necesidad de migrar alumnos / cursos / historial ✅ Reversible fácilmente — eliminar la herramienta de Moodle = vuelve al estado anterior ✅ Por curso (solo cursos seleccionados, no toda la institución)
Limitaciones
- Rendimiento: cada LTI launch tarda ~500-1000ms (validación JWT + bootstrapping de Studeia)
- Experiencia SSO: el alumno hace 1 clic en Moodle, 1-2s después está en Studeia (no instantáneo)
- Actividades Moodle Workshop: no mapeables a Studeia (recrear manualmente)
- Plugins personalizados de Moodle: no se invocan via LTI de Studeia