クイックスタート

5分でわかるLantern

デモライブラリに3つ、自分のサーバーに3つのコマンドと、全体の流れを1つの図で。

デモライブラリを読む

デモはこのサイトが配信する静的ライブラリです。インストールもサインインも不要です。

  1. ハンドシェイクを読む

    各ライブラリは、自身が何か、どの機能を提供し、どんな制限があるかを1つの文書で示します。

    curl -s https://lantern.boreale.dev/demo/lantern.json
  2. アプリを一覧する

    1つのプラットフォームのアプリ1ページ。各アプリにサイズ、sha256、ファイルのパスが付きます。

    curl -s https://lantern.boreale.dev/demo/v1/apps/vita/pages/1.json
  3. ダウンロードして検証

    ファイルのSHA-256はアプリが示したものと同じです。一致しなければクライアントは拒否します。

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

ほかにも試せます。クライアントを壊すためのライブラリもあります: デモライブラリ

自分のサーバーと話す

アカウントのあるサーバーは、まずペアリングを求めます。これらの呼び出しは架空のアドレスを使います。

  1. 見つける

    ローカルネットワークではUDPデータグラムで発見し、アドレスがあれば既知のパスでハンドシェイクを読みます。

    curl -s https://shelf.example.org/.well-known/lantern
  2. ペアリング

    サーバーはコードを返し、所有者は別の端末でサインインしてコードを入力・承認します。

    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. 呼び出す

    受け取ったトークンをベアラーとして使います。鍵でペアリングした端末は各リクエストにも署名します。

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

全体の流れ

1ステップずつ進めます。押すたびに1つのステップが点灯し、他は暗くなります。

端末サーバーユーザーのスマホUDP 47115 {"lantern":"discover"}{"lantern":"server", uid, port, base}ヒントにすぎません。信頼はTLSとペアリングから生まれますGET /.well-known/lanternhandshake: uid, versions,platforms, features, limitsペアリング (§ 5.2)POST /v1/pairing{device, scopes, key}code KQ4M-7TXD, verify_complete,poll, intervalコード、QRコード、鍵の短いフィンガープリントを表示リンクを開き、サインインし、フィンガープリントを照合して承認GET <poll> (every interval)202 … then 200 {token: et_…}or 410 gone · 429 slow_downこのuidのサーバー鍵をピン留め (§ 5.3)以降、毎回の呼び出しでAuthorization: Bearer et_…+ request signature200 · 401 · 403
サーバーの発見から最初の署名付き呼び出しまで
  1. 端末 → サーバー: UDP 47115 {"lantern":"discover"}
  2. サーバー → 端末: {"lantern":"server", uid, port, base}
  3. ヒントにすぎません。信頼はTLSとペアリングから生まれます
  4. 端末 → サーバー: GET /.well-known/lantern
  5. サーバー → 端末: handshake: uid, versions, platforms, features, limits
  6. ペアリング (§ 5.2)
  7. 端末 → サーバー: POST /v1/pairing {device, scopes, key}
  8. サーバー → 端末: code KQ4M-7TXD, verify_complete, poll, interval
  9. コード、QRコード、 鍵の短いフィンガープリントを表示
  10. ユーザーのスマホ → サーバー: リンクを開き、サインインし、 フィンガープリントを照合して承認
  11. 端末 → サーバー: GET <poll> (every interval)
  12. サーバー → 端末: 202 … then 200 {token: et_…} or 410 gone · 429 slow_down
  13. このuidのサーバー鍵を ピン留め (§ 5.3)
  14. 以降、毎回の呼び出しで
  15. 端末 → サーバー: Authorization: Bearer et_… + request signature
  16. サーバー → 端末: 200 · 401 · 403

仕様