我正在將OAuth添加到RESTful API。出人意料的是,使用PHP的OAuth和OAuthProvider類(從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
只是把任何不作爲內部服務器錯誤?
在此先感謝您的幫助。
謝謝aitchnyu。你是絕對正確的。我也在文檔中看到過SHOULD,但是預計/希望OAuthProvider的實現與這封信非常接近。我會堅持下去,看看有沒有人在將你的答案標記爲已接受之前知道500個答案的來源。 –
「有任何想法」我很好奇自己:-)我剛剛離開大學,並承擔了自己一起爭取OAuth提供商的任務。 – aitchnyu