[英]PHP OAuthProvider Returns HTTP 500
我正在努力將OAuth添加到RESTful API中。 令人驚訝的是,使用PHP的OAuth和OAuthProvider類(來自pecl / oauth)我對簽名等沒有任何問題。
我遇到問題的地方是當出現錯誤時間戳等錯誤時會發生什么。 我按以下方式設置我的提供者:
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
消息是正確的,但肯定這應該是HTTP 401。
我在這里做錯了什么,或者OAuthProvider
只是將任何故障視為內部服務器錯誤?
在此先感謝您的幫助。
OAuth草案以簡單的方式描述了400和401標頭的使用。
http://oauth.net/core/1.0a/#http_codes
http://tools.ietf.org/html/rfc5849上的實際OAuth協議如下:
如果請求驗證失敗,服務器應該應該使用適當的HTTP響應狀態代碼進行響應。 服務器可以包括
有關請求在響應中被拒絕的詳細信息
身體。服務器應該返回400(錯誤請求)狀態代碼
接收具有不受支持的參數的請求,不受支持
簽名方法,缺少參數或重復的協議
參數。 服務器應該返回401(未授權)狀態
接收具有無效客戶端憑據的請求時的代碼,
無效或過期的令牌,無效的簽名, 無效或已使用的 nonce 。
和“SHOULD”這個詞,在http://tools.ietf.org/html/rfc2119中定義
- 應該這個詞,或形容詞“推薦”,意味着在特定情況下可能存在有效理由忽略
特殊項目,但必須理解全部含義
在選擇不同的課程之前仔細權衡。
雖然我沒有明確的答案,但我認為作者無償地使用500代碼而沒有考慮“完整含義”,除非每次有“過時”請求時庫都會遇到實際錯誤。 但它似乎完全有效。
如果在catch中添加$ provider-> reportProblem()會發生什么?
問題報告擴展程序通過OAuthProvider :: reportProblem()公開
如果您沒有看到預期的行為,您可以提供pkg版本嗎? 我將提交一個錯誤並盡快修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.