0

データセットに開発者APIを提供します。2本足のoauth認証を追加して、APIを使用する開発者アプリを認証できるようにします。まず、これはこのタイプの認証に最適なソリューションですか?

第二に、実装/フローの観点から、私の理解は正しいです:

  1. ランダムな開発者が私のサイトにアクセスし、「サインアップ」ページを使用します。このページを送信すると、APIキーシークレットが生成されます。

  2. 次に、ここにあるphpのようなoauthライブラリを使用して、これらの資格情報を使用してリクエストに署名します。

    $ Consumer = new OAuthConsumer('thegeneratedkey'、'thegeneratedsecret');

$ sig_method = new OAuthSignatureMethod_HMAC_SHA1;

//use oauth lib to sign request
$req = OAuthRequest::from_consumer_and_token($consumer, null, "GET", 'http://mydonaim/api/', array('someapimethod', 'somevalue'));
$sig_method = new OAuthSignatureMethod_HMAC_SHA1();
$req->sign_request($sig_method, $consumer, null);//note: double entry of token
  1. 次に、サーバーはoauthライブラリを使用して、そのリクエストの「署名」をチェックし、開発者アプリを認証します。

$ secret='秘密'; //この行を無視します。

$secret = 'secret'; // Use the $_GET['oauth_consumer_key'] to find the secret in my system.
$consumer = new OAuthConsumer($_GET['oauth_consumer_key'], $secret);
$sig_method = new OAuthSignatureMethod_HMAC_SHA1;

$method = $_SERVER['REQUEST_METHOD'];
$uri = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$sig = $_GET['oauth_signature'];    
$req = new OAuthRequest($method, $uri);

//token is null because we're doing 2-leg
$valid = $sig_method->check_signature( $req, $consumer, null, $sig );

これは正しいです?

その場合、この認証はリクエストが行われるたびに実行する必要がありますか、それとも開発者アプリからAPIへの各HTTPリクエストの重みを減らすために何らかのトークンを生成できますか?

4

1 に答える 1

1

まず、これはこのタイプの認証に最適なソリューションですか?

OAuthは、アプリケーションがユーザーの資格情報を知らなくてもサードパーティのサービスからユーザーデータを取得できるように設計されています。それがあなたがする必要があることである限り、OAuthはあなたにとって正しい解決策です。

その場合、この認証はリクエストが行われるたびに実行する必要がありますか、それとも開発者アプリからAPIへの各HTTPリクエストの重みを減らすために何らかのトークンを生成できますか?

トークン/シークレットの両方のセットは、すべてのAPIリクエストで提供され、認証のためにOAuthライブラリに渡される必要があります。これがOAuthの仕組みです。プロセスにさらに別のトークンを追加しないでください。追加すると、事態がさら​​に複雑になり、最終的にOAuthを取得した貧しい開発者のがらくたを混乱させる可能性があります。

キーセットは、アプリケーション全体へのアクセスを取り消すことができるように存在することを忘れないでください。そうするためのインターフェイスをユーザーに提供することを前提として、ユーザーは同じことを行うことができます。両方のセットが各リクエストに含まれているため、アプリケーションはそれらの有効性を確認できます。

ベンチマークとプロファイリングを実行し、リクエストのサイズが作業する必要があると判断した場合を除いて、HTTPリクエストの「重み」について心配する必要はありません。私はそれが問題ではないことをほぼ保証することができます。

于 2011-03-13T16:03:30.200 に答える