金鑰、令牌和名稱都是虛構的測試值(金鑰是 RFC 8032 公布的測試金鑰),絕非真實。
逐位元組的簽章請求
以金鑰配對的裝置會為每個帶令牌的請求簽章。伺服器依請求重建簽章基,並用綁定到該令牌的金鑰校驗簽章。
送出的請求
GET /api/lantern/v1/apps?page_size=50 HTTP/1.1
Host: shelf.example.org
Authorization: Bearer et_c8V1nQ0xYbExampleVectorToken0000000000
Signature-Input: lantern=("@method" "@target-uri" "authorization");created=1793345400;nonce="tQ0Vb3Yt7sXx2c1mZ8kq4A";keyid="If4x36FUomFia_hUBG_SJxt77UtqvkWqWId-9H-XIbk";alg="ed25519"
Signature: lantern=:M8AuwRfGqDSUYUefbsIOlmFKxvi+6HnHv0pvbD22n/lrJqHvPcvYThUUCqK+6C63s9nTQPThdrTfM9yFwt6aBA==:
裝置所簽章的簽章基
"@method": GET
"@target-uri": https://shelf.example.org/api/lantern/v1/apps?page_size=50
"authorization": Bearer et_c8V1nQ0xYbExampleVectorToken0000000000
"@signature-params": ("@method" "@target-uri" "authorization");created=1793345400;nonce="tQ0Vb3Yt7sXx2c1mZ8kq4A";keyid="If4x36FUomFia_hUBG_SJxt77UtqvkWqWId-9H-XIbk";alg="ed25519"
裝置的金鑰
private key (seed): 9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60
public key: 11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo=
keyid: If4x36FUomFia_hUBG_SJxt77UtqvkWqWId-9H-XIbk
short fingerprint: 21FE 31DF A154 A261
沒有簽章的同一請求
Authorization: Bearer et_c8V1nQ0xYbExampleVectorToken0000000000
→ 401 · signature_required
從代碼到令牌的配對
裝置請求並顯示代碼;其擁有者在已登入伺服器的另一台裝置上核准;裝置輪詢直到令牌被一次性給出。
1. 裝置請求配對
POST /api/lantern/v1/pairing HTTP/1.1 Host: shelf.example.org Content-Type: application/json { "schema": 1, "device": "Lea's Switch", "scopes": [ "library", "saves" ], "key": { "alg": "ed25519", "public_key": "11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo=" } }2. 伺服器回傳代碼
HTTP/1.1 200 OK Content-Type: application/json { "schema": 1, "code": "KQ4M-7TXD", "verify": "https://shelf.example.org/pair", "verify_complete": "https://shelf.example.org/pair?code=KQ4M-7TXD", "poll": "/api/lantern/v1/pairing/p_4Fh2", "interval": 5, "expires": 600 }3. 擁有者核准,裝置輪詢
GET /api/lantern/v1/pairing/p_4Fh2 HTTP/1.1 Host: shelf.example.org Signature-Input: lantern=("@method" "@target-uri");created=…;nonce="…";keyid="…";alg="ed25519" Signature: lantern=:…:4. 令牌,僅一次
HTTP/1.1 200 OK Content-Type: application/json { "schema": 1, "token": "et_c8V1nQ0xYb", "scopes": [ "library", "saves" ], "bound": true, "rating_cap": { "system": "PEGI", "rating": "12" } }
給對等主機的授權
伺服器簽署一則簡短聲明:某用戶端可讀取某個檔案;持有該檔案的對等主機用伺服器的公鑰校驗,無需詢問任何人。
伺服器所簽署的內容(JSON,鍵依此順序,無空白)
{"exp":1793346000,"purpose":"lantern-grant-1","sha256":"3a7bd3e2b4c1f0a9e8d7c6b5a4938271605f4e3d2c1b0a9f8e7d6c5b4a392817","size":734003200,"uid":"6f1c2a8e-4b7d-4e2a-9c31-8d5e2f0a7b14"}
授權:載荷及其簽章,各為 base64url
eyJleHAiOjE3OTMzNDYwMDAsInB1cnBvc2UiOiJsYW50ZXJuLWdyYW50LTEiLCJzaGEyNTYiOiIzYTdiZDNlMmI0YzFmMGE5ZThkN2M2YjVhNDkzODI3MTYwNWY0ZTNkMmMxYjBhOWY4ZTdkNmM1YjRhMzkyODE3Iiwic2l6ZSI6NzM0MDAzMjAwLCJ1aWQiOiI2ZjFjMmE4ZS00YjdkLTRlMmEtOWMzMS04ZDVlMmYwYTdiMTQifQ.-4SQt-G8QN_sjMzKfaBGDl7b7Z-tW2qHaeC8bSwe70tHH4lVsyhxnMVMrb3r4y3RVBzbhOTeWdP4d6jFjex5Bg
public key (peers.key): FkDVKwFG57y5KAWiHAahZeQ1pO2FxI5AehF/nZjLXq8=