我正在努力将 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
只是将任何故障视为内部服务器错误?
在此先感谢您的帮助。