繁体   English   中英

PHP OAuthProvider返回HTTP 500

[英]PHP OAuthProvider Returns HTTP 500

我正在努力将OAuth添加到RESTful API中。 令人惊讶的是,使用PHP的OAuthOAuthProvider类(来自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中定义

  1. 应该这个词,或形容词“推荐”,意味着在特定情况下可能存在有效理由忽略
    特殊项目,但必须理解全部含义
    在选择不同的课程之前仔细权衡。

虽然我没有明确的答案,但我认为作者无偿地使用500代码而没有考虑“完整含义”,除非每次有“过时”请求时库都会遇到实际错误。 但它似乎完全有效。

如果在catch中添加$ provider-> reportProblem()会发生什么?

问题报告扩展程序通过OAuthProvider :: reportProblem()公开

如果您没有看到预期的行为,您可以提供pkg版本吗? 我将提交一个错误并尽快修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM