ajoute Moodle LTI 1.3 (V2), une 6e façon de rejoindre une classe

LTI authentifie l'élève et le fait rejoindre sa classe (même code que
le code/QR existant), pas lancer un lab précis - relecture du
CLAUDE.md qui liste LTI avec les autres façons d'ajouter des élèves.
packbackbooks/lti-1p3-tool (Apache-2.0, recommandé par le CLAUDE.md),
trois ponts vers Redis/cookies/MariaDB, élève retrouvé par identité
Moodle stable pour ne jamais créer de doublon. Enregistrement d'une
plateforme/d'un déploiement par commande Artisan (opération rare,
faite à la main par Adam), jamais une page d'administration.

Corrige au passage un vrai bug préexistant trouvé en vérifiant en réel
sur le serveur : withoutMiddleware(ValidateCsrfToken::class) sur une
route ne retire jamais le vrai middleware CSRF (ValidateCsrfToken est
un alias déprécié de PreventRequestForgery, pas la classe réellement
enregistrée) - /csp-rapport avait le même défaut depuis l'étape 14,
invisible faute de surveillance. Corrigé pour les deux par la bonne
méthode (validateCsrfTokens except, dans bootstrap/app.php).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Adam Belkacemi 2026-10-14 13:51:47 +02:00
parent 777dd1cbc8
commit 91d7cde4c1
27 changed files with 1293 additions and 9 deletions

View file

@ -0,0 +1,74 @@
# Runbook — Moodle LTI 1.3
6ᵉ façon de rejoindre une classe (V2, CLAUDE.md section 6) : un élève
clique sur l'activité Moodle, atterrit connecté sur son tableau de bord
Syllabus habituel. Détail des choix :
[ADR 0010](../adr/0010-lti-moodle-comme-sixieme-facon-de-rejoindre.md).
## Étape 1 — Côté Moodle : ajouter Syllabus comme outil externe
Administration du site → Plugins → Outils externes → Gérer les outils →
Configurer un outil manuellement. Renseigner :
| Champ Moodle | Valeur |
|---|---|
| URL de l'outil | `https://syllabuslab.fr/lti/lancement/<code de la classe>` (visible sur la page de la classe, section « Lier à Moodle ») |
| LTI version | 1.3 |
| Initiate login URL | `https://syllabuslab.fr/lti/connexion` |
| Redirection URIs | la même URL de lancement que ci-dessus |
| Public key type | Clé publique au format JWKS |
| Jeu de clés publiques (URL) | `https://syllabuslab.fr/lti/cles.json` |
Après enregistrement, Moodle **affiche** un « Platform ID », un
« Client ID », une « Public keyset URL », une « Access token URL » et une
« Authentication request URL » — ce sont ces valeurs-là (celles de
Moodle, pas les nôtres) qu'il faut passer à l'étape 2.
## Étape 2 — Côté serveur : enregistrer la plateforme
```
ssh paillasse
cd /var/www/portail
sudo -u www-data HOME=/tmp php8.3 artisan lti:enregistrer-plateforme \
"<Platform ID affiché par Moodle>" \
"<Client ID affiché par Moodle>" \
"<Public keyset URL affichée par Moodle>" \
"<Access token URL affichée par Moodle>" \
"<Authentication request URL affichée par Moodle>"
```
La commande génère et stocke une paire de clés RSA pour le portail (jamais
collée par Adam) et rappelle les deux adresses déjà saisies à l'étape 1.
## Étape 3 — Ajouter l'outil à un cours, puis enregistrer le déploiement
Dans le cours Moodle : ajouter une activité « Outil externe » pointant
vers Syllabus. Une fois ajoutée, Moodle affiche un **Deployment ID** pour
cette combinaison outil/cours — à enregistrer :
```
sudo -u www-data HOME=/tmp php8.3 artisan lti:enregistrer-deploiement <id_plateforme> <deployment_id>
```
`<id_plateforme>` est l'identifiant numérique affiché à l'étape 2
(« Plateforme #… enregistrée »).
## Vérifier que ça fonctionne
Un élève qui clique sur l'activité dans Moodle doit atterrir connecté sur
`/eleve`, dans la bonne classe. En cas d'échec, Moodle affiche en général
le message d'erreur renvoyé par le portail (page « Le lancement depuis
Moodle n'a pas fonctionné ») :
| Message | Cause probable |
|---|---|
| Classe introuvable ou archivée | Le code dans l'URL de lancement ne correspond à aucune classe active |
| LTI 1.3 Registration not found… | Étape 2 pas faite, ou Platform ID/Client ID mal recopiés |
| Unable to find deployment | Étape 3 pas faite pour ce cours précis |
| Please make sure you have cookies… | Cookies tiers bloqués côté navigateur de l'élève, ou horloge du serveur décalée |
## Un élève change d'identité Moodle ou rejoint depuis deux cours
Peu probable, mais si ça arrive : un nouveau compte serait créé (l'élève
est retrouvé par `lti_sub`, propre à Moodle). Pas de fusion automatique —
à faire à la main si ça se produit réellement.