コンテンツにスキップ

invalid_signature

HTTP 401 · Ludion-Error: invalid_signature

このリクエストには Web Bot Auth の署名があり、Gate は鍵も見つけました。しかし署名が成り立ちませんでした。原因が何であれ、Gate はこれをなりすましとして扱います。よくある原因は次のとおりです。

  • 署名の後でリクエストが変わった(プロキシがヘッダーを書き換えた、本文が変わった)
  • 別のホスト宛ての署名だった。@authority はこのサイトでなければなりません
  • 時計。created が未来にある、または expires を過ぎている(±30秒のずれは許します。仕様 §10.4)
  • 寿命 expires − created が60秒を超えている(仕様 §10.4)
  • tag が web-bot-auth でない、または Signature-Agent の辞書のキーと署名のラベルが一致しない
  • 同じ署名(または nonce)をもう一度送った。署名は使い回せません

署名に価値があるのは、偽造や再送が決して通らないときだけです。Gate は、送られたとおりに検証できない署名をすべて拒否します。だから誰もあなたの名前を借りられず、あなたも他の誰かの VERIFIED を信用できます。

  • リクエストごとに、送る直前に新しい署名を作り、その後は何も変えないでください。
  • 呼び出すホストに対して署名し、寿命は60秒以内にします(仕様 §10.4)。
  • 時計を合わせます(NTP)。npx ludion doctor が署名に使う時刻を表示します。
  • POST、PUT、PATCH、DELETE では @method、@path、content-digest も対象に含めます。npx ludion sign はこれを自動で行います。

Ludion は Web Bot Auth を置き換えません。Web Bot Auth(RFC 9421)でリクエストに署名し、鍵ディレクトリを公開しているエージェントは、Ludion の Gate ではすでに VERIFIED(Depth 0)です。まだ署名していなければ、無料の Ludion CLI で次の手順を踏んでください。

3分は、この道の目標です。チェック DIV-1 として書いてあります。クリーンなコンテナで、init から VERIFIED まで180秒以内。

  1. エージェントの身分(Diver)を作ります。Root 鍵はパスフレーズで封をされ、リクエストには署名しません。署名するのは短命の Session 鍵です。

    Terminal window
    npx ludion init --name "My Agent" --contact mailto:you@example.com
  2. 書き出された公開ファイルを、Signature-Agent のオリジンに HTTPS で置きます。.well-known/http-message-signatures-directory(鍵。application/http-message-signatures-directory+json で返す)と card(名乗り)です。自分のドメインで構いません。登録の受付が始まれば dvr-….agents.ludion.ai にも置けます。

  3. リクエストごとに署名します。次のコマンドは Signature-Agent、Signature-Input、Signature を付けた curl をそのまま出力します。署名の寿命は 60 秒なので(仕様 §10.4)、毎回作り直してください。

    Terminal window
    npx ludion sign GET https://shop.example/checkout --curl
  4. 自己診断します。doctor は公開した鍵ディレクトリと Card を取りに行き、Gate が見るものを確かめます。リダイレクトなしの 200、Content-Type、ディレクトリに今の鍵があること、です。

    Terminal window
    npx ludion doctor

これで Gate はあなたのリクエストを VERIFIED と判定します。サイトがそれ以上に求めるもの(Depth、Ballast、Mandate)はその上に積むもので、それぞれ Gate のエラー に説明のページがあります。