7

アプリケーション データベースを利用して情報を取得するために、ユーザーに提供している Web サービスがあります。ユーザーは API キーを登録し、リクエストを行うときにそれを提供する必要があります。すべて正常に動作しますが、キーを登録したユーザーが実際にリクエストを行っているかどうかを確認するにはどうすればよいですか?

私は過去2日間、解決策を考え出そうと考えていましたが、今のところ何もありません.

4

2 に答える 2

12

署名付きリクエストを使用する必要があります。基本的には次のように機能します。

  • あなたとクライアントだけが知っている API キー「シークレット」(ランダムな文字列) をユーザーに与えます。
  • リクエストを行うたびに、「署名」パラメーターを追加します。この署名は基本的に、リクエスト パラメータ + API キー + その他のパラメータ (以下を参照) + シークレットのハッシュです。
  • 秘密も知っているので、署名が正しいことを確認できます。

リプレイ攻撃を回避するために、ナンスとタイムスタンプをミックスに追加することもできます。nonce は、リクエストごとにクライアントがインクリメントする必要がある単純な数値です。リクエストを受け取ったら、このナンス/タイムスタンプを以前に受け取ったかどうかを確認します。そうした場合は、要求を拒否します (リプレイ攻撃である可能性が高いため)。そうでない場合は、ナンス/タイムスタンプをデータベースに保存して、後で検索できるようにします。

これは、多かれ少なかれリクエストがOAuthで署名される方法です。リンクの例を見てください。

于 2012-06-14T07:27:40.627 に答える
2

REST API 呼び出しの認証には 2 つの部分があります。ユーザーがサービスに登録するときは、通常、そのユーザーを識別する KEY を割り当てます。場合によっては、これで十分です。ただし、この KEY は共有または盗まれる可能性があります。その場合でも、サービスは KEY が有効であると見なします。ここで、鍵の乗っ取りなどを防ぐために、秘密鍵も配布します。このキーは、REST API 要求で転送されることはありません。このキーは、API リクエストの一方向ハッシュを実行し、署名 (HMAC) を作成するために使用されます。

この署名と API リクエスト (URL 形式の HTTP リクエスト) が API サーバーに送信されます。サーバーは URL の一方向ハッシュを実行し、このユーザーの秘密鍵を使用して署名と比較します。それらが一致する場合、リクエスタが秘密鍵にアクセスできると「想定」されるため、リクエストは有効です。

リプレイ アタックを回避するために、ナンスに加えて (前のポスターで提案されているように)、ハッシュ チェーンを使用することもできます。

于 2014-02-24T22:14:55.737 に答える