Démarrage rapide

Lantern en cinq minutes

Trois commandes sur la bibliothèque de démo, trois sur un serveur à vous, et tout le chemin en une figure.

Lire la bibliothèque de démo

La démo est une bibliothèque statique servie avec ce site : rien à installer, aucun compte.

  1. Lire son handshake

    Chaque bibliothèque dit ce qu'elle est, les fonctions qu'elle offre et ses limites dans un seul document.

    curl -s https://lantern.boreale.dev/demo/lantern.json
  2. Lister ses applis

    Une page d'applis pour une plateforme : chacune porte sa taille, son sha256 et le chemin de son fichier.

    curl -s https://lantern.boreale.dev/demo/v1/apps/vita/pages/1.json
  3. Télécharger et vérifier

    Le SHA-256 du fichier est celui qu'annonçait l'appli. Un client refuse ce qui ne correspond pas.

    curl -s https://lantern.boreale.dev/demo/v1/blobs/sha256/fa75492f7b78cad7ca4044e8fb548ac67bfd7fbf05242ceecb29ebe492218a0d | sha256sum

D'autres essais, dont des bibliothèques faites pour piéger un client : Bibliothèque de démonstration

Parler à un serveur à vous

Un serveur à comptes demande d'abord à l'appareil de s'apparier. Ces appels utilisent une adresse fictive.

  1. La trouver

    Sur un réseau local, un client la découvre par un datagramme UDP ; avec une adresse, il lit le handshake à un chemin connu.

    curl -s https://shelf.example.org/.well-known/lantern
  2. S'apparier

    Le serveur répond par un code à saisir sur un autre appareil, où son propriétaire se connecte et approuve.

    curl -s -X POST https://shelf.example.org/api/lantern/v1/pairing \
      -H 'Content-Type: application/json' \
      -d '{"schema":1,"device":"My console","scopes":["library"]}'
  3. L'appeler

    Avec le jeton reçu, en porteur ; un appareil apparié avec une clé signe en plus chaque requête.

    curl -s https://shelf.example.org/api/lantern/v1/apps?page_size=5 \
      -H 'Authorization: Bearer et_…'

Tout le chemin

Parcourez-le pas à pas : chaque pression éclaire une étape et estompe les autres.

AppareilServeurTéléphone de l'utilisateurUDP 47115 {"lantern":"discover"}{"lantern":"server", uid, port, base}Un simple indice : la confiance vient de TLS et de l'appairageGET /.well-known/lanternhandshake: uid, versions,platforms, features, limitsAppairage (§ 5.2)POST /v1/pairing{device, scopes, key}code KQ4M-7TXD, verify_complete,poll, intervalAffiche le code, un QR codeet l'empreinte courte de la cléOuvre le lien, se connecte,compare l'empreinte, approuveGET <poll> (every interval)202 … then 200 {token: et_…}or 410 gone · 429 slow_downÉpingle la clé du serveurpour ce uid (§ 5.3)Ensuite, à chaque appelAuthorization: Bearer et_…+ request signature200 · 401 · 403
De la découverte d'un serveur au premier appel signé
  1. Appareil → Serveur: UDP 47115 {"lantern":"discover"}
  2. Serveur → Appareil: {"lantern":"server", uid, port, base}
  3. Un simple indice : la confiance vient de TLS et de l'appairage
  4. Appareil → Serveur: GET /.well-known/lantern
  5. Serveur → Appareil: handshake: uid, versions, platforms, features, limits
  6. Appairage (§ 5.2)
  7. Appareil → Serveur: POST /v1/pairing {device, scopes, key}
  8. Serveur → Appareil: code KQ4M-7TXD, verify_complete, poll, interval
  9. Affiche le code, un QR code et l'empreinte courte de la clé
  10. Téléphone de l'utilisateur → Serveur: Ouvre le lien, se connecte, compare l'empreinte, approuve
  11. Appareil → Serveur: GET <poll> (every interval)
  12. Serveur → Appareil: 202 … then 200 {token: et_…} or 410 gone · 429 slow_down
  13. Épingle la clé du serveur pour ce uid (§ 5.3)
  14. Ensuite, à chaque appel
  15. Appareil → Serveur: Authorization: Bearer et_… + request signature
  16. Serveur → Appareil: 200 · 401 · 403

Spécification