Snelstart

Lantern in vijf minuten

Drie commando's tegen de demobibliotheek, drie tegen een eigen server en het hele pad in één figuur.

De demobibliotheek lezen

De demo is een statische bibliotheek die met deze site wordt geleverd: niets te installeren, geen account.

  1. De handshake lezen

    Elke bibliotheek zegt in één document wat ze is, welke functies ze biedt en wat haar grenzen zijn.

    curl -s https://lantern.boreale.dev/demo/lantern.json
  2. Zijn apps weergeven

    Een pagina met apps voor één platform: elk heeft zijn grootte, sha256 en het pad van zijn bestand.

    curl -s https://lantern.boreale.dev/demo/v1/apps/vita/pages/1.json
  3. Downloaden en controleren

    De SHA-256 van het bestand is die welke de app aankondigde. Een client weigert wat niet klopt.

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

Meer om te proberen, ook bibliotheken die een client moeten laten falen: Demobibliotheek

Praten met een eigen server

Een server met accounts vraagt eerst om te koppelen. Deze aanroepen gebruiken een verzonnen adres.

  1. Vinden

    In een lokaal netwerk ontdekt een client hem met een UDP-datagram; met een adres leest hij de handshake op een vast pad.

    curl -s https://shelf.example.org/.well-known/lantern
  2. Koppelen

    De server antwoordt met een code die op een ander apparaat wordt ingevoerd, waar de eigenaar inlogt en goedkeurt.

    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. Aanroepen

    Met het ontvangen token, als bearer; een apparaat dat met een sleutel koppelde ondertekent ook elk verzoek.

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

Het hele pad

Doorloop het stap voor stap: elke druk verlicht één stap en dimt de rest.

ApparaatServerTelefoon van de gebruikerUDP 47115 {"lantern":"discover"}{"lantern":"server", uid, port, base}Slechts een hint: vertrouwen komt van TLS en koppelingGET /.well-known/lanternhandshake: uid, versions,platforms, features, limitsKoppeling (§ 5.2)POST /v1/pairing{device, scopes, key}code KQ4M-7TXD, verify_complete,poll, intervalToont de code, een QR-codeen de korte vingerafdruk van de sleutelOpent de link, meldt zich aan,vergelijkt de vingerafdruk en keurt goedGET <poll> (every interval)202 … then 200 {token: et_…}or 410 gone · 429 slow_downPint de sleutel van de servervoor deze uid (§ 5.3)Daarna bij elke aanroepAuthorization: Bearer et_…+ request signature200 · 401 · 403
Van het vinden van een server tot de eerste ondertekende aanroep
  1. Apparaat → Server: UDP 47115 {"lantern":"discover"}
  2. Server → Apparaat: {"lantern":"server", uid, port, base}
  3. Slechts een hint: vertrouwen komt van TLS en koppeling
  4. Apparaat → Server: GET /.well-known/lantern
  5. Server → Apparaat: handshake: uid, versions, platforms, features, limits
  6. Koppeling (§ 5.2)
  7. Apparaat → Server: POST /v1/pairing {device, scopes, key}
  8. Server → Apparaat: code KQ4M-7TXD, verify_complete, poll, interval
  9. Toont de code, een QR-code en de korte vingerafdruk van de sleutel
  10. Telefoon van de gebruiker → Server: Opent de link, meldt zich aan, vergelijkt de vingerafdruk en keurt goed
  11. Apparaat → Server: GET <poll> (every interval)
  12. Server → Apparaat: 202 … then 200 {token: et_…} or 410 gone · 429 slow_down
  13. Pint de sleutel van de server voor deze uid (§ 5.3)
  14. Daarna bij elke aanroep
  15. Apparaat → Server: Authorization: Bearer et_… + request signature
  16. Server → Apparaat: 200 · 401 · 403

Specificatie