2011-09-14 14 views
0

私はOAuthをRESTfulなAPIに追加しようとしています。驚くべきことに、(PECL/OAuthのから)PHPのOAuthOAuthProviderクラスを使用して、私はPHP OAuthProviderがHTTP 500を返す

私は問題が発生していますような悪いタイムスタンプなどのエラーが発生したときに何が起こるかであるなどの署名に問題を持っていたていませんでした。

public function authenticate(){ 
    try { 
     $provider = new OAuthProvider(); 
     $provider->consumerHandler(array($this,'handleConsumer')); 
     $provider->timestampNonceHandler(array($this,'handleTimestampNonce')); 
     $provider->tokenHandler(array($this,'handleToken')); 
     $provider->isRequestTokenEndpoint(FALSE); 
     $provider->checkOAuthRequest(); 
    } catch (Exception $e) { 
     // Do nothing. 
    } 
} 

ハンドラ関数のすべての要求が期待通りに進めることが可能である、OAUTH_OK戻ったら、次のように私は私のプロバイダを設定しています。タイムスタンプが悪いときに何が起こるかを見るために、私はこのように私のtimestampNonceHandlerを書いている:私はこれを実行すると

public function handleTimestampNonce($provider){ 
    return OAUTH_BAD_TIMESTAMP; 
} 

、正しく署名要求を(はい、私は確信している)渡し、応答はHTTPです500

[headers_recv] => HTTP/1.1 500 Internal Server Error 
Date: Wed, 14 Sep 2011 08:47:59 GMT 
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8r DAV/2 PHP/5.3.4 
X-Powered-By: PHP/5.3.4 
Content-Length: 648 
Connection: close 
Content-Type: 0 
[body_recv] => Invalid nonce/timestamp combination 

メッセージは正しいですが、確かにこのshouldはHTTPも401

は、私がここで間違って何かをやっている、またはOAuthProviderだけで内部サーバーエラーなどの任意の障害を扱うのですか?

ご協力いただきありがとうございます。

答えて

1

OAuthのドラフトでは、400と401のヘッダーを簡単に使用する方法について説明しています。

http://oauth.net/core/1.0a/#http_codes

http://tools.ietf.org/html/rfc5849における実際OAuthプロトコルは、このようにspeaketh:

要求が検証に失敗した場合、サーバは 適切なHTTPレスポンスステータスコードで応答すべきです。サーバは、
を含むかもしれません。なぜなら、その要求が応答の中で拒絶された理由の詳細です。
体です。

サーバがサポートされていないパラメータを使用して要求、サポートされていない
署名方法、欠落しているパラメータ、または複製プロトコル
パラメータを受信400(悪いRequest)ステータスコード
を返すべきです。無効なクライアントの資格情報、
無効または有効期限が切れたトークン、無効な署名、または無効または 使用ノンスで要求を受信した場合、サーバは401(不正な)ステータス
コードを返すべきです。

、ワード、

  1. http://tools.ietf.org/html/rfc2119で定義されるように、この単語、または「推奨」という形容詞は、そこ は、特に状況でを正当な理由が存在し得ることを意味すべきである「SHOULD」
    の特定の項目を無視しますが、の完全な意味を理解する必要があります。また、
    を慎重に調べてから、di fferentコース。

私はは決定的な答えを持っていけないながら、私は、ライブラリが実際のエラーをヒットしない限り、「完全な含意を」考慮せずにそこにあるたびに、500のコードを使用して作成者が無償でであることを推測します「時代遅れの」要求。しかし、それは完全に有効と思われる。

+0

ありがとうaitchnyu。あなたは絶対に正しいです。私はドキュメントでSHOULDも見ましたが、OAuthProviderの実装が手紙にかなり近いと期待/期待していました。あなたの答えを受け入れる前に500人の回答がどこから来たのかについて誰かが考えているかどうかを知りたいです。 –

+0

"私は自分自身が好奇心を抱いています:-)私はちょうど大学を去り、OAuthプロバイダを自分自身で論じるという仕事を与えられています。 – aitchnyu

1

catchの内部に$ provider-> reportProblem()を追加するとどうなりますか?あなたはPKGのバージョンを提供することができます期待される動作が表示されない場合

problem reporting extensionOAuthProvider::reportProblem()

を介して公開されますか?私はバグを報告し、できるだけ早く修正します。

+0

こんにちは。応答の遅れに対する謝罪。私はそれを行って、できるだけ早くあなたに戻ってきます。 –

関連する問題