APIキーをREST APIに渡す 質問する

APIキーをREST APIに渡す 質問する

CodeIgniter の Phil Sturgeon REST_Controller を使用して REST API を作成しています。これまでのところ、ユーザー用の API キーを生成するためのシンプルなライブラリを作成できました。問題は、各リクエストに対して API キーを API に送信することです。リクエストごとに手動で送信せずに、これをどのように実行すればよいでしょうか。

ベストアンサー1

リクエスト署名について調べてみましょう。良い例がAmazon の S3 REST API

概要は実に簡単です。ユーザーが API を使用するには、公開ユーザー ID とプライベート API キーという 2 つの重要な情報が必要です。ユーザーはリクエストとともに公開 ID を送信し、プライベート キーを使用してリクエストに署名します。受信サーバーはユーザーのキーを検索し、署名されたリクエストが有効かどうかを判断します。フローは次のようになります。

  1. ユーザーがサービスに参加し、ユーザー ID (例: 123) と API キーを取得します。
  2. ユーザーは、電子メール アドレスを更新するリクエストを API サービスに送信したいので、おそらく にリクエストを API に送信する必要があります。/user/[email protected]
  3. リクエストを検証できるようにするため、ユーザーはユーザーIDとサイン通話に、通話は/user/[email protected]&userid=123&sig=some_generated_string
  4. サーバーは呼び出しを受信し、それが userid=123 からのものであることを確認し、そのユーザーの API キーを検索します。次に、データから署名を作成する手順を複製し、署名が一致した場合、リクエストは有効です。

この方法論により、APIキーは通信の一部として送信されることはありません

PHPを見てみましょうハッシュ_hmac()関数は、署名されたリクエストを送信するためによく使用されます。一般的に、ユーザーには、すべてのパラメータを配列に入れて、アルファベット順に並べ替え、文字列に連結し、hash_hmacその文字列から署名を取得するなどの操作を行ってもらいます。この例では、次のようにします。

$sig = hash_hmac("sha256",$params['email'].$params['userid'],$API_KEY)

次に、それを$sig上記のように REST URL に追加します。

おすすめ記事