OAuth在一台主机上失败

时间:2012-08-05 05:57:36

标签: php linux macos zend-framework oauth

这是我的代码:

$key = "xxx";
$secret = "xxx";
$url = "https://oauth.withings.com/account";

$config = array(
    "siteUrl" => $url,
    "consumerKey" => $key,
    "consumerSecret" => $secret,
    "requestMethod" => "GET"
);
$consumer = new Zend_Oauth_Consumer($config);

try {
    $token = $consumer->getRequestToken();
} catch (Zend_Oauth_Exception $e){
    print $e;
}

当我在Mac上运行它(OSX 10.8,PHP 5.3.13,Zend 1.11.12)时,它可以正常工作。

但是当我在我的Linux服务器(Debian 6.0.5,PHP 5.3.3,Zend 1.10.6)上运行它时,它失败了。 Zend文档很薄,但是在1.10 och 1.11之间发生了一些事情,导致相同的代码失败了吗?错误消息如下:

“异常'Zend_Oauth_Exception',消息'无法从令牌网址检索有效的令牌响应:'”

错误似乎表明没有发送任何URL。现在,Zend 1.10和1.11的“siteUrl”配置选项似乎是相同的,所以不可能,对吗?

在我的Linux主机上手动构建URL并使用CURL时,我得到正确的响应,因此它不能是网络或阻塞问题。

将URL更改为“/ accounts”(即使其成为错误的URL)时,它会使用此代码返回Mac和Linux的HTML 404代码。

我在这里不知所措。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

404表示找不到,因此服务器无法为URL提供文档,不应该与auth有任何关系... Auth失败应该是403.如果你只获得带有auth的404, 404可能正在重定向......您应该尝试使用Charles代理或类似方法来调试请求。

编辑我重读并看到404是故意的......我仍然会尝试调试请求

答案 1 :(得分:0)

我在Zend_Oauth_Http的代码中发现异常,似乎响应未通过方案检查,您可能希望明确设置方案。

代码:

 /**
     * Manages the switch from OAuth request scheme to another lower preference
     * scheme during a request cycle.
     *
     * @param  Zend_Http_Response
     * @return void
     * @throws Zend_Oauth_Exception if unable to retrieve valid token response
     */
    protected function _assessRequestAttempt(Zend_Http_Response $response = null)
    {
        switch ($this->_preferredRequestScheme) {
            case Zend_Oauth::REQUEST_SCHEME_HEADER:
                $this->_preferredRequestScheme = Zend_Oauth::REQUEST_SCHEME_POSTBODY;
                break;
            case Zend_Oauth::REQUEST_SCHEME_POSTBODY:
                $this->_preferredRequestScheme = Zend_Oauth::REQUEST_SCHEME_QUERYSTRING;
                break;
            default:
                require_once 'Zend/Oauth/Exception.php';
                throw new Zend_Oauth_Exception(
                    'Could not retrieve a valid Token response from Token URL:'
                    . ($response !== null
                        ? PHP_EOL . $response->getBody()
                        : ' No body - check for headers')
                );
        }
    }

希望它有所帮助。