Prérequis
- Plan Studeia avec LTI activé (Enterprise ou plans payants)
- Rôle Admin Canvas (pour enregistrer une Developer Key)
- HTTPS des deux côtés (LTI 1.3 exige TLS)
Configuration
1. Studeia : générer la config LTI tool
/institution/lti-tools > New Tool :
- Tool name : "Canvas 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 génère un Client ID + Deployment ID
Studeia affiche le JSON de config complet (spec LTI 1.3) — copiez-le.
2. Canvas : enregistrer une Developer Key
- Canvas Admin > Developer Keys > + Developer Key > LTI Key
- Method : Paste JSON
- Collez le JSON de config de l'étape 1
- Save > ON (activer la key)
- Copiez le Client ID généré par Canvas
3. Canvas : installer l'app sur le compte/cours
- Account Admin > Settings > Apps > + App > By Client ID
- Collez le Client ID
- Configurez les placements :
- Course Navigation (lien dans le menu latéral du cours)
- Assignment Selection (créer un assignment Studeia)
- Link Selection (lien dans des pages/modules)
- User Navigation (lien dans le menu de l'utilisateur)
4. Valider
Dans n'importe quel cours Canvas : menu latéral > Studeia tool > doit ouvrir Studeia connecté avec le même utilisateur (via OIDC launch).
Fonctionnement
L'apprenant dans Canvas clique sur "Studeia Module"
↓
Canvas POST /lti/login?iss=... (Studeia OIDC Login endpoint)
↓
Studeia valide + retourne une redirection vers Canvas avec :
- state (HMAC-signed)
- nonce (Redis 15min anti-replay)
↓
Canvas redirige l'apprenant vers /lti/launch avec JWT id_token signé
↓
Studeia LtiService.launch() :
1. Valide la signature JWT via Canvas JWKS
2. Valide le nonce (anti-replay)
3. Valide iss, aud, exp, deployment_id
4. Extrait user_id, name, email, roles, context_id
5. JIT provisioning (crée l'utilisateur s'il n'existe pas — User.externalId = LTI sub)
6. Crée/met à jour l'Enrollment (mapping course_id)
7. Démarre la session Studeia (Supabase auth)
↓
Redirection vers le module/la leçon/le quiz indiqué (LtiLaunch.targetResource)
↓
L'apprenant utilise Studeia normalement
AGS grade passback
Lorsqu'un apprenant termine une activité Studeia associée à un AGS line_item :
LessonCompletion / QuizAttempt se termine
↓
Studeia LtiAdvantageService.sendScore() :
POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores
Body : {
userId: lti.sub,
scoreGiven: 85,
scoreMaximum: 100,
activityProgress: "Completed",
gradingProgress: "FullyGraded",
timestamp: now()
}
Auth : OAuth 2.0 Client Credentials grant (Studeia private key signe le JWT)
↓
Canvas met à jour le Gradebook automatiquement
Pas de double écriture — Canvas Gradebook reste source-of-truth.
Names and Roles Provisioning Service (NRPS)
La spec LTI 1.3 permet à Studeia de consulter la liste des apprenants du cours Canvas :
GET {nrps_url}/memberships
Auth : Bearer (OAuth 2.0 Client Credentials)
Retourne le roster (apprenants + rôles). Utile pour pré-peupler les Enrollments avant le premier launch.
Cas d'usage courants
Université déjà sur Canvas souhaitant Studeia sur un cours spécifique
- Le département d'Informatique décide d'utiliser Studeia pour CS101 (tuteur IA réel)
- L'Admin Canvas ajoute le Studeia tool dans le cours CS101
- Structure : Canvas gère les topics + assignments + gradebook. Studeia gère le tuteur IA + gamification + contenu interactif
- Quizzes via Studeia → grade passback vers le Canvas Gradebook
- Les autres cours Canvas continuent sans Studeia
Migration progressive Canvas → Studeia
- Ajouter Studeia LTI dans tous les cours
- Nouveaux cours : créer directement dans Studeia, lien LTI dans Canvas comme point d'entrée
- Cours legacy : maintenir dans Canvas, compléter avec Studeia
- En 1-2 ans : évaluer le décommissionnement de Canvas
Limitations
- Deep Linking 1.3 : Studeia prend en charge la sélection d'une ressource spécifique (module/leçon) lors de l'ajout du tool dans un assignment
- LTI Sub Manage (sub-tenants) : non pris en charge nativement — chaque tenant Studeia = une Developer Key Canvas
- Intégration plagiat Canvas : non via Studeia LTI (utiliser un plugin Canvas séparé)
Dépannage
Échec de validation JWT
Vérifier que la JWKS URL Studeia est accessible publiquement : curl https://[tenant].studeia.com/.well-known/jwks.json doit retourner un JSON avec les clés.
Le grade passback ne fonctionne pas
Vérifier que le scope AGS est activé dans la Developer Key Canvas : https://purl.imsglobal.org/spec/lti-ags/scope/score + lineitem.readonly ou lineitem.
L'apprenant voit "Tool unavailable"
Nonce OIDC expiré (>15min) ou mismatch du state HMAC. Recharger la page Canvas.