quest'n'click 4.5.0 · r1

Construite pour quest'n'click 4.5.0, révision r1. Si elle est publiée, et laquelle est la courante, est dit par publication.json.

Connecteur Open Badges

English · Type : procédure + référence · Public : administrateur · Contexte : Reality Bridge · Statut : prête · S'applique depuis : 4.3.0

Les connecteurs (email, Telnet, SSH, Open Badges) · contrat : expérimental · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Node 22 sous Ubuntu (Telnet et SSH pas sous Windows) · vérifications automatiques : jobs connectors, connector-archive-e2e ; plan de CI reality ; 3 fichiers de tests · passes humaines : connectors-real-security pas faite (#79) · limites connues : bridge-badge-code-once

Le connecteur Open Badges sert un petit formulaire : un joueur y poste un badge (une assertion Open Badges 2.0 ou un justificatif 3.0) avec le code d’appairage que montre son jeu, le connecteur vérifie le badge, et le verdict (valid, invalid, expired, revoked, indeterminate) propose le signal que le jeu lui associe. Le jeu ne reçoit jamais le badge. Il est expérimental, comme tous les connecteurs (Vue d’ensemble des connecteurs).

Ce que vous obtenez

Un processus quest-n-click-connector open-badge qui répond à POST /v1/badges, va chercher les documents du badge sous une politique réseau stricte, et propose un signal par badge et par verdict.

Contexte et versions

Prérequis

Où lancer les commandes

grant là où est le dossier du Bridge ; le connecteur derrière votre proxy HTTPS, dans un dossier qui contient sa configuration et son jeton. npm run connector -- open-badge … dans le dépôt du moteur, npx quest-n-click-connector open-badge … avec le paquet.

Étapes

  1. Donnez au connecteur son jeton, pour les signaux de badge seulement, avec l’appairage :

    # dans le dépôt du moteur (le dossier du Bridge est .cache/bridge)
    npm run bridge -- grant --connector=garden-badges --source=badge --signals=badge.valid,badge.refused --pair > badge.token
    
  1. Écrivez sa configuration, badge.json ; hosts vaut par défaut les hôtes des émetteurs https: du jeu :

    {
      "bridge": { "url": "http://127.0.0.1:8787/", "tokenFile": "badge.token" },
      "gameId": "signals",
      "health": { "port": 9304 },
      "open-badge": { "port": 8790, "hosts": ["badges.example.org"] }
    }
    
  1. Lancez-le :

    # dans le dépôt du moteur
    npm run connector -- open-badge --config badge.json
    

    Il refuse de démarrer quand le jeu ne déclare pas de reality.connectors['open-badge'].

  1. Un joueur poste, avec un code que le jeu vient de montrer :

    # côté joueur (votre formulaire le fait)
    curl -s -X POST http://127.0.0.1:8790/v1/badges -H 'Content-Type: application/json' \
      -d '{"code":"ABCD2345","badge":"https://badges.example.org/assertions/42","email":"player@example.org"}'
    

    badge est une URL, un JWS compact, ou le justificatif lui-même ; email (ou recipient) est ce à quoi on compare un destinataire haché. La réponse est 202 {"status":"valid","signal":"accepted"}, ou 200 {"status":"…","signal":"none"} quand le jeu ne déclare aucun signal pour ce verdict.

Résultat attendu, et comment le vérifier

Erreurs fréquentes

RéponseCauseCorrection
422 {"error":"pairing-pairing"}Le code est inconnu, expiré ou déjà utilisé : un code ne sert qu’une foisUn nouveau code depuis le jeu
400 {"error":"shape"}Pas du JSON, ou pas de codePoster { code, badge, email? }
202 avec "status":"indeterminate"Une suite de preuve qu’il ne sait pas vérifier (eddsa-rdfc-2022…), ou un document qu’il n’a pas pu chercher sous sa politiqueDemander à l’émetteur un format pris en charge ; vérifier hosts
202 avec "status":"invalid"Un autre émetteur que ceux du jeu, un destinataire qui ne correspond pas, une signature mauvaise ou faible—
413, ou 429 {"error":"rate"}Un corps de plus de 64 Ko ; plus de 30 envois par minute depuis une adresse—

Fichiers ou données modifiés

Rien sur disque. Les listes de révocation et de statut sont gardées en mémoire un jour au plus.

Reprise ou retour en arrière

Arrêtez le processus (SIGTERM). Révoquez son jeton sur le Bridge s’il a fuité, et donnez-en un nouveau.

Limite · bridge-badge-code-once Un code d’appairage ne sert qu’une fois. Chaque envoi demande un code que le jeu vient de montrer, et le confirmer lie le jeu à un nouveau joueur pseudonyme, comme tout appairage.

Référence : ce qui est vérifié

Référence : la politique réseau

Chaque document est cherché sous une seule politique : https: seulement ; les hôtes de hosts (par défaut les hôtes des émetteurs) ; le nom résolu une seule fois, et aucune adresse privée, de boucle locale, de lien local, multicast ou non spécifiée (IPv4, IPv6 et IPv6 mappé IPv4) ; deux redirections au plus, chacune revérifiée ; 64 Ko ; 10 secondes ; du JSON imbriqué sur 8 niveaux au plus ; @context jamais cherché.

Garantie · bridge-badge-network-policy · référencée · exécutée sur aff6caab7514 · portée vérifiée par son auteur (IA), pas relue Une requête sans https:, vers un hôte hors liste, avec des identifiants dans son URL, ou dont le nom se résout vers une adresse privée est refusée, et un nom n’est résolu qu’une fois (pas de rebinding).

La section open-badge :

ChampDéfautSens
port, host—, 127.0.0.1Où écoute POST /v1/badges
hostsles hôtes des émetteurs https: du jeuD’où les documents peuvent être cherchés
perMinutePerIp30Envois par minute et par adresse
maxBytes65 536Le corps d’un envoi

Ce qu’il garde

Le badge et les documents vers lesquels il pointe sont cherchés, vérifiés puis abandonnés ; seul un verdict sort du connecteur, sous forme de signal, avec une empreinte de l’id du badge et de l’émetteur en evidenceHash. L’e-mail qu’un joueur donne pour correspondre à un destinataire haché est haché avec le sel du badge pour la comparaison, puis abandonné : jamais gardé, journalisé ni envoyé. Les listes de révocation et de statut (celles d’un émetteur, pas d’une personne) sont gardées un jour au plus. Les adresses qui postent sur le formulaire sont comptées en mémoire pendant une minute (la limite de débit), puis oubliées.

Références


Modifier la source de cette page · Signaler une erreur