Partie 10 — LTI (Learning Tools Interoperability)
Public : développeur web (Next.js / React / TypeScript) maîtrisant OAuth 2.0, OpenID Connect et les JWT, qui veut intégrer une application externe dans Moodle (ou l’inverse) selon le standard LTI 1.3 Advantage.
Version de référence : Moodle 5.2 (PHP 8.3+). LTI 1.3 / Advantage : OIDC third-party login, JWT signés (JWKS), et les services AGS (notes), NRPS (rosters), Deep Linking.
Là où la Partie 9 (web services) connecte Moodle à votre backend par token, LTI connecte des outils pédagogiques à des plateformes par un standard interopérable : un même outil se branche sur Moodle, Canvas, Blackboard, Brightspace… sans code spécifique par LMS. LTI apporte le SSO (l’utilisateur clique dans le LMS et arrive authentifié dans l’outil), le contexte (cours, rôle), le retour de notes et la liste des inscrits. Cette partie va de la théorie du protocole à la construction d’un outil LTI complet en Next.js (fil rouge : QuizLab), en passant par les deux rôles de Moodle : plateforme (il consomme des outils) et outil (il est publié vers un autre LMS).
Sommaire de la partie
Chapitre 1 — Comprendre LTI : le standard qui connecte les outils aux LMS
Le socle conceptuel (peu de code) : le problème que LTI résout, le vocabulaire précis (platform, tool, deployment, resource link, context), l’évolution des versions (LTI 1.1 vs 1.3 Advantage, et pourquoi certaines sont mortes), et où Moodle 5.2 se situe. La carte mentale de toute la partie.
Chapitre 2 — LTI 1.3 sous le capot
La mécanique cryptographique et les flux : OpenID Connect en mode third-party initiated login, les JWT signés et les JWKS, le modèle de confiance platform ↔ tool, puis les services LTI Advantage — AGS (Assignment and Grade Services, les notes), NRPS (Names and Role Provisioning Services, les rosters) et Deep Linking (sélection de contenu). Le « comment ça marche vraiment ».
Chapitre 3 — Moodle en tant que plateforme : consommer des outils LTI
Moodle joue le consumer : configurer un outil externe (LTI 1.3) dans Moodle, l’enregistrement (endpoints, clés, JWKS), l’ajout d’une activité Outil externe, le Deep Linking côté enseignant, la réception des notes, et le débogage (NTP/clock skew, cookies tiers en iframe, JWKS joignable). Notre app Next.js QuizLab y joue le rôle d’outil.
Chapitre 4 — Moodle en tant qu’outil : « Publish as LTI tool »
La perspective inverse : Moodle fournisseur LTI. La fonctionnalité Publier en tant qu’outil LTI (LTI Provider) qui expose un cours ou une activité Moodle pour qu’une autre plateforme (un autre Moodle, Canvas, ou votre app Next.js jouant la plateforme) les lance à distance — avec provisioning des utilisateurs et synchronisation des notes dans l’autre sens.
Chapitre 5 — Construire un outil LTI 1.3 complet en Next.js
Le grand tutoriel : QuizLab, un outil LTI 1.3 complet en Next.js 15 (App Router), branché sur Moodle 5.2. Launch SSO, Deep Linking, remontée de note AGS, liste des inscrits NRPS — chaque étape codée (OIDC, validation JWT, appels de services), avec la sécurité (nonce, state, clock skew, cookies tiers).
Ce que vous saurez faire à la fin de cette partie
- Expliquer LTI 1.3 Advantage et son modèle de confiance à partir de vos acquis OIDC/JWT.
- Configurer Moodle comme plateforme consommant un outil externe (et déboguer les pièges).
- Configurer Moodle comme outil publié vers une autre plateforme.
- Construire un outil LTI 1.3 complet en Next.js : SSO, Deep Linking, AGS, NRPS.
- Sécuriser un flux LTI (nonce, state, validation de signature, cookies tiers).
💡 Pour un dev React : LTI 1.3 n’est pas un OVNI — c’est OIDC + JWT signés + OAuth 2.0 client-credentials, plus des claims métier normalisés (utilisateur, cours, rôle, endpoint de note). Si vous avez déjà implémenté « Sign in with Google » et appelé une API avec un access token, vous avez 80 % des briques. Le reste est du vocabulaire éducatif et des endpoints de services.
⚠️ Piège transverse : LTI se lance souvent dans une iframe → cookies tiers (SameSite, ITP, CHIPS), et repose sur des JWT à durée de vie courte → sensibilité au clock skew (synchronisez l’horloge, NTP). Ces deux points causent l’essentiel des échecs de mise en route ; ils reviennent aux chapitres 2, 3 et 5.
Chapitre suivant : 01 — Comprendre LTI