快速入门

五分钟了解 Lantern

对演示库三条命令,对你自己的服务器三条命令,整个流程一张图。

读取演示库

演示库是随本站提供的静态库:无需安装,无需登录。

  1. 读取握手文档

    每个库用一份文档说明它是什么、提供哪些功能以及有哪些限制。

    curl -s https://lantern.boreale.dev/demo/lantern.json
  2. 列出其中的应用

    某个平台的一页应用:每个都带有大小、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. 调用

    携带获得的令牌(Bearer);以密钥配对的设备还会对每个请求签名。

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

完整流程

逐步查看:每按一次点亮一步,其余变暗。

设备服务器用户的手机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显示代码、二维码和密钥的短指纹打开链接、登录,核对指纹并批准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. 显示代码、二维码 和密钥的短指纹
  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

规范