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:
parent
777dd1cbc8
commit
91d7cde4c1
27 changed files with 1293 additions and 9 deletions
74
docs/runbooks/lti-moodle.md
Normal file
74
docs/runbooks/lti-moodle.md
Normal 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue