2011-09-14 29 views
0

我正在將OAuth添加到RESTful API。出人意料的是,使用PHP的OAuthOAuthProvider類(從PECL/OAuth的),我沒有與任何簽名的問題,等等。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協議從而說話:

如果請求驗證失敗,服務器應該與 適當的HTTP響應狀態代碼進行響應。服務器可能包括
關於爲什麼請求在響應
正文中被拒絕的更多詳細信息。

服務器應當返回接收與不支持的參數的請求,不支持的
簽名方法,缺少的參數,或複製協議
參數400(錯誤請求)狀態代碼時
。接收與無效的客戶端證書的請求時,服務器應當返回401(未授權)狀態
代碼,
無效或過期的標記,一個無效的簽名,或一個無效或使用 隨機數

而「應當」一詞,如http://tools.ietf.org/html/rfc2119

  1. 定義應該這個詞,或「推薦」的形容詞,意味着有 可能存在正當的理由在特殊情況下到忽略
    特定項目,但完全影響必須理解和
    仔細權衡之前選擇一個di不同的路線。

雖然我有一個明確的答案,我想,作者使用的是500碼,而不考慮「全面影響」 無償,除非庫每次有擊中實際的錯誤一個「過時的」請求。但它似乎完全有效。

+0

謝謝aitchnyu。你是絕對正確的。我也在文檔中看到過SHOULD,但是預計/希望OAuthProvider的實現與這封信非常接近。我會堅持下去,看看有沒有人在將你的答案標記爲已接受之前知道500個答案的來源。 –

+0

「有任何想法」我很好奇自己:-)我剛剛離開大學,並承擔了自己一起爭取OAuth提供商的任務。 – aitchnyu

1

如果在catch中添加$ provider-> reportProblem(),會發生什麼?

problem reporting extension通過OAuthProvider::reportProblem()

暴露。如果您沒有看到預期的行爲,你可以提供PKG版本?我將提交一個錯誤並儘快修復。

+0

嗨,約翰。對延遲迴應抱歉。我會盡快給你答覆,儘快回覆你。 –