Terrain 18 — LTI & headless (Next.js)
⏱️ TL;DR — 20 mini-jeux
⭐⭐⭐⭐⭐sur le sommet de ta double compétence : brancher un outil externe LTI 1.3 écrit en Next.js sur Moodle — lancement depuis un cours, deep linking, remontée de note (AGS). C’est l’architecture d’un vrai micro-SaaS (QuizLab) revendable, le projet Niveau 5 et la Partie 13 en mini-jeux.
💡 Pour un dev React — LTI 1.3 est de l’OAuth2/OIDC + JWT que tu connais. Un launch = un flux OIDC signé ; un grade passback = un appel REST authentifié. La partie React/Next.js (l’outil) est ton terrain.
🕹️ Mini-jeu 1 — Plateforme vs outil ⭐⭐⭐⭐ 💻
But : le vocabulaire LTI. Mission : distingue plateforme (LMS) et outil (tool).
✅ Solution
En LTI, la plateforme (Moodle) lance un outil externe (ton app). L’outil s’affiche intégré, reçoit qui/où, et peut renvoyer une note. Moodle peut être les deux (plateforme via mod_lti, ou outil via enrol/lti). Ici : Moodle = plateforme, QuizLab = outil.
🕹️ Mini-jeu 2 — Moodle comme plateforme ⭐⭐⭐ 🛠️
But : le module LTI. Mission : repère l’activité Outil externe (mod_lti).
✅ Solution
L’activité Outil externe (mod_lti) intègre un outil LTI dans un cours. C’est via elle que l’étudiant lance QuizLab. Les outils se préconfigurent au niveau site (jeu 3) puis s’ajoutent aux cours.
🕹️ Mini-jeu 3 — Configurer un outil LTI 1.3 ⭐⭐⭐⭐⭐ 🛠️
But : enregistrer QuizLab. Mission : ajoute un outil externe (Administration → Plugins → Outil externe → Gérer les outils) en LTI 1.3.
✅ Solution
On saisit l’URL de lancement, l’URL de login/redirect, et l’URL des clés publiques (JWKS) de l’outil. Moodle fournit en retour ses propres endpoints + un client id et deployment id. C’est l’appariement des deux parties.
🕹️ Mini-jeu 4 — Les clés (JWKS) ⭐⭐⭐⭐⭐ 💻
But : l’échange de confiance. Mission : comprends le rôle des JWKS, client id, deployment id.
✅ Solution
Chaque partie publie ses clés publiques (JWKS .well-known) pour que l’autre vérifie les signatures des JWT. Le client id identifie l’outil auprès de la plateforme ; le deployment id identifie un déploiement précis. Socle cryptographique du launch (jeu 10).
🕹️ Mini-jeu 5 — Lancer l’outil ⭐⭐⭐ 🎓
But : vivre le launch. Mission : ajoute l’activité Outil externe (QuizLab) à un cours et lance-la en étudiant.
✅ Solution
Depuis le cours, un clic lance l’outil : Moodle initie le flux OIDC, l’outil s’affiche (intégré ou nouvelle fenêtre) en connaissant l’utilisateur et le contexte. C’est le cœur de l’expérience LTI. Teste en « se connectant en tant qu’ » étudiant.
🕹️ Mini-jeu 6 — Le flux OIDC launch ⭐⭐⭐⭐⭐ 💻
But : la séquence de lancement. Mission : décris les étapes login → auth → launch.
✅ Solution
Le JWT de launch (id_token) porte l’identité et le contexte. L’outil doit le valider avant tout (jeu 10). Flux OIDC classique, appliqué à l’éducation.
🕹️ Mini-jeu 7 — Deep Linking ⭐⭐⭐⭐⭐ 💻
But : choisir le contenu depuis Moodle. Mission : configure le Deep Linking (l’enseignant choisit un quiz dans QuizLab).
✅ Solution
Le Deep Linking laisse l’enseignant, depuis Moodle, ouvrir l’outil pour sélectionner/configurer un contenu (un quiz précis), qui revient s’insérer comme activité. Deux flux : deep link (config) et resource link (lancement). Confort enseignant majeur.
🕹️ Mini-jeu 8 — AGS : remonter la note ⭐⭐⭐⭐⭐ 💻
But : le grade passback. Mission : renvoie le score de QuizLab dans le carnet de notes Moodle.
✅ Solution
AGS (Assignment & Grade Services) : l’outil crée/associe une line item et POST le score → il apparaît dans le carnet de notes (terrain 07). Appel REST authentifié par un jeton OAuth2 obtenu via les clés. La note « boucle » de l’outil vers Moodle.
🕹️ Mini-jeu 9 — NRPS : la liste des inscrits ⭐⭐⭐⭐⭐ 💻
But : connaître la classe. Mission : (bonus) récupère le roster via NRPS.
✅ Solution
NRPS (Names and Role Provisioning Services) permet à l’outil de lire la liste des participants et leurs rôles — pour un tableau de bord enseignant dans QuizLab. Optionnel mais puissant. Complète le trio LTI Advantage (launch + AGS + NRPS).
🕹️ Mini-jeu 10 — Valider le JWT ⭐⭐⭐⭐⭐ 💻
But : LE point de sécurité. Mission : dans QuizLab, valide le JWT de launch.
✅ Solution
Jamais faire confiance à un launch sans vérifier : signature (via JWKS de Moodle), iss, aud, exp, nonce (anti-rejeu), deployment_id. Un outil qui saute une vérif est exploitable. C’est le cœur sécurité du produit (terrain 16, mentalité).
🕹️ Mini-jeu 11 — Le squelette Next.js ⭐⭐⭐⭐⭐ 💻
But : poser l’outil.
Mission : crée les routes login, launch, jwks, deep-link dans un Next.js.
✅ Solution
QuizLab (App Router) expose : /api/lti/login (init OIDC), /api/lti/launch (reçoit et valide le JWT), /.well-known/jwks.json (tes clés publiques), /api/lti/deep-link. Une lib LTI 1.3 (ltijs, ou custom) gère le protocole. Ton terrain : le reste est du Next.js.
🕹️ Mini-jeu 12 — Rendre le quiz ⭐⭐⭐⭐ 💻
But : l’expérience React. Mission : après un launch valide, affiche un quiz interactif (React).
✅ Solution
Une fois le launch validé, tu es en plein React : composants de quiz, état, timer, UI moderne. C’est là que ta compétence brille (bien au-delà de ce que fait un quiz Moodle natif). L’identité/contexte viennent du JWT validé.
🕹️ Mini-jeu 13 — Renvoyer le score ⭐⭐⭐⭐⭐ 💻
But : boucler avec AGS. Mission : à la fin du quiz, POST le score via AGS.
✅ Solution
Score calculé → obtention d’un access token OAuth2 (client credentials, signé avec ta clé privée) → POST vers l’endpoint scores de la line item. Vérifie que la note apparaît dans le carnet Moodle (terrain 07). La boucle est fermée.
🕹️ Mini-jeu 14 — Multi-tenant ⭐⭐⭐⭐⭐ 💻
But : un outil, N plateformes. Mission : structure QuizLab pour servir plusieurs déploiements.
✅ Solution
Un vrai outil LTI stocke la config par plateforme/déploiement (issuer, client id, clés, endpoints) et route chaque launch vers le bon tenant. Ainsi le même QuizLab sert Moodle A, Moodle B, Canvas… C’est ce qui en fait un produit (1 outil, N clients), pas une intégration jetable.
🕹️ Mini-jeu 15 — Secrets côté serveur ⭐⭐⭐⭐⭐ 💻
But : ne rien exposer. Mission : garde clés privées et secrets côté serveur.
✅ Solution
La clé privée de signature, les client secrets : jamais dans le bundle client — uniquement en variables d’environnement, utilisées dans les routes serveur. HTTPS partout. Même hygiène que les web services (terrain 17, jeu 19), enjeu encore plus fort.
🕹️ Mini-jeu 16 — Headless : LTI + web services ⭐⭐⭐⭐⭐ 💻
But : combiner les ponts. Mission : imagine QuizLab qui lit aussi des données via web services (terrain 17).
✅ Solution
LTI gère launch + identité + note ; les web services (terrain 17) donnent l’accès aux données (cours, participants). Un outil riche combine les deux : LTI pour l’intégration, WS pour la data. Ton pont Moodle↔moderne complet.
🕹️ Mini-jeu 17 — Tester le launch ⭐⭐⭐⭐⭐ 💻
But : débuguer le protocole. Mission : utilise un client LTI de test (IMS/1EdTech reference) pour lancer QuizLab hors Moodle.
✅ Solution
Un client LTI de référence (1EdTech LTI RI) simule une plateforme → tu débogues le launch/validation/AGS isolément, sans dépendre de Moodle. Puis tu valides le vrai launch depuis Moodle. Méthode pro pour un protocole complexe.
🕹️ Mini-jeu 18 — Moodle comme outil ⭐⭐⭐⭐ 🛠️
But : l’autre sens.
Mission : repère enrol/lti (publier une activité Moodle comme outil LTI).
✅ Solution
Via enrol/lti, Moodle peut être l’outil : publier un cours/activité consommable par un autre LMS. Utile pour vendre du contenu Moodle à des tiers. Le protocole est symétrique — savoir les deux sens élargit tes options business.
🕹️ Mini-jeu 19 — Le modèle SaaS ⭐⭐⭐⭐⭐ 💻
But : transformer l’outil en revenu. Mission : esquisse le modèle : plans, quotas, isolation par tenant.
✅ Solution
Un outil LTI multi-tenant + facturation (abonnement par établissement, quotas de quiz) = un micro-SaaS récurrent (QuizLab, Partie 13). Standard LTI = portabilité (tout LMS compatible). C’est le débouché premium de ta double compétence Moodle × Next.js.
🕹️ Mini-jeu 20 — Récap LTI/headless ⭐⭐⭐⭐⭐ 💻
But : capstone du terrain (et fin des mini-jeux Moodle !). Mission : QuizLab fonctionnel : enregistrement LTI 1.3, launch OIDC validé, deep linking, quiz React, grade passback (AGS) vérifié dans le carnet, secrets côté serveur, pensé multi-tenant.
✅ Solution
Tu as bâti un outil LTI headless en Next.js branché sur Moodle — le sommet de ta double compétence, et un produit revendable (projet Niveau 5, Partie 13). Tu as bouclé les 18 terrains : de « je découvre Moodle » à « j’héberge un micro-SaaS LTI ». 🎉
Et maintenant ? Enchaîne sur les projets guidés : ils assemblent tous ces réflexes en réalisations complètes et monétisables.
🎓 Fin des mini-jeux Moodle. ~470 défis, de la découverte pure au micro-SaaS LTI. Reviens piocher un terrain quand tu veux muscler un point précis. Retour à la vue d’ensemble ou cap sur les projets guidés.