invalid_signature
HTTP 401 · Ludion-Error: invalid_signature
何が起きたか
Section titled “何が起きたか”このリクエストには Web Bot Auth の署名があり、Gate は鍵も見つけました。しかし署名が成り立ちませんでした。原因が何であれ、Gate はこれをなりすましとして扱います。よくある原因は次のとおりです。
- 署名の後でリクエストが変わった(プロキシがヘッダーを書き換えた、本文が変わった)
- 別のホスト宛ての署名だった。
@authorityはこのサイトでなければなりません - 時計。
createdが未来にある、またはexpiresを過ぎている(±30秒のずれは許します。仕様 §10.4) - 寿命
expires − createdが60秒を超えている(仕様 §10.4) tagがweb-bot-authでない、またはSignature-Agentの辞書のキーと署名のラベルが一致しない- 同じ署名(または nonce)をもう一度送った。署名は使い回せません
サイトがこれを求める理由
Section titled “サイトがこれを求める理由”署名に価値があるのは、偽造や再送が決して通らないときだけです。Gate は、送られたとおりに検証できない署名をすべて拒否します。だから誰もあなたの名前を借りられず、あなたも他の誰かの VERIFIED を信用できます。
- リクエストごとに、送る直前に新しい署名を作り、その後は何も変えないでください。
- 呼び出すホストに対して署名し、寿命は60秒以内にします(仕様 §10.4)。
- 時計を合わせます(NTP)。
npx ludion doctorが署名に使う時刻を表示します。 - POST、PUT、PATCH、DELETE では
@method、@path、content-digestも対象に含めます。npx ludion signはこれを自動で行います。
3分で検証済みになる
Section titled “3分で検証済みになる”Ludion は Web Bot Auth を置き換えません。Web Bot Auth(RFC 9421)でリクエストに署名し、鍵ディレクトリを公開しているエージェントは、Ludion の Gate ではすでに VERIFIED(Depth 0)です。まだ署名していなければ、無料の Ludion CLI で次の手順を踏んでください。
3分は、この道の目標です。チェック DIV-1 として書いてあります。クリーンなコンテナで、init から VERIFIED まで180秒以内。
-
エージェントの身分(Diver)を作ります。Root 鍵はパスフレーズで封をされ、リクエストには署名しません。署名するのは短命の Session 鍵です。
Terminal window npx ludion init --name "My Agent" --contact mailto:you@example.com -
書き出された公開ファイルを、
Signature-Agentのオリジンに HTTPS で置きます。.well-known/http-message-signatures-directory(鍵。application/http-message-signatures-directory+jsonで返す)とcard(名乗り)です。自分のドメインで構いません。登録の受付が始まればdvr-….agents.ludion.aiにも置けます。 -
リクエストごとに署名します。次のコマンドは
Signature-Agent、Signature-Input、Signatureを付けたcurlをそのまま出力します。署名の寿命は 60 秒なので(仕様 §10.4)、毎回作り直してください。Terminal window npx ludion sign GET https://shop.example/checkout --curl -
自己診断します。
doctorは公開した鍵ディレクトリと Card を取りに行き、Gate が見るものを確かめます。リダイレクトなしの 200、Content-Type、ディレクトリに今の鍵があること、です。Terminal window npx ludion doctor
これで Gate はあなたのリクエストを VERIFIED と判定します。サイトがそれ以上に求めるもの(Depth、Ballast、Mandate)はその上に積むもので、それぞれ Gate のエラー に説明のページがあります。