Codeigniterのphil sturgeon REST_Controllerを使用してREST apiを作成しています。これまでのところ、ユーザー用のapiキーを生成するための簡単なライブラリを作成できました。各リクエストのAPIのキー、リクエストごとに手動で送信することなくこれを行う方法。
リクエストの署名を検討する必要があります。素晴らしい例は AmazonのS3 REST API です。
概要は実際には非常に簡単です。ユーザーには、APIを使用するための2つの重要な情報、パブリックユーザーIDとプライベートAPIキーがあります。彼らはリクエストとともにパブリックIDを送信し、プライベートキーを使用してリクエストに署名します。受信サーバーはユーザーのキーを検索し、署名されたリクエストが有効かどうかを判断します。フローは次のようなものです。
/user/[email protected]
。/user/[email protected]&userid=123&sig=some_generated_string
この方法により、APIキーが通信の一部として送信されることはありません。
PHPの hash_hmac() 関数を見てください。これは、署名付きリクエストの送信で人気があります。一般に、ユーザーはすべてのパラメーターを配列に入れ、アルファベット順にソートし、文字列に連結してからhash_hmac
署名を取得する文字列。この例では、次のことができます。
$sig = hash_hmac("sha256",$params['email'].$params['userid'],$API_KEY)
次に、その$sig
をREST上記のURLに追加します。
RESTの考え方は、ステートレスであるため、セッションも何もありません。認証したい場合、これがキーの出番であり、すべてのリクエストと各リクエストに対してキーを渡す必要がありますユーザーを認証します(RESTはステートレスです。それについて言及しましたか?)。
キーを渡すにはさまざまな方法があります。パラメータとして渡すことができます(つまり http://example.com/api/resource/id?key=api_key )か、HTTPヘッダーの一部として渡すことができます。ユーザー名を送信することを指定するAPIと、HTTP基本アクセス認証ヘッダーのパスワード部分としてのAPIキーを見てきました。
リクエストの例:
<?php
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'http://example.com/api/resource/id',
CURLOPT_USERPWD => 'martinbean:4eefab4111b2a'
));
$response = curl_exec($ch);
martinbean
はあなたのウェブサイトの私のアカウントのユーザー名であり、4eefab4111b2a
が私のAPIキーになります。