簡體   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