2011-02-10 123 views
1

獲得訪問令牌後,我想用它來讀取受保護的數據(例如聯繫人)。但作爲對請求的響應,我得到
Token invalid - Invalid AuthSub token.
Error 401
[PHP]錯誤401令牌無效,同時使用谷歌API的oauth訪問令牌

我相比,我從OAuth園地發送這些參數和他們之間沒有區別(除了時間戳,隨機數和被理解的簽名)。
我的頭看起來是這樣的:
Content-Type: application/atom+xml
Authorization: OAuth oauth_parameters

任何想法可能會錯呢?

+0

我得到完全相同的錯誤(Google Analytics API除外)。有什麼建議麼? – 2011-05-27 15:27:59

回答

1

我沒有設置會話正確,所以我是用我的實際與祕密的,而不是我的訪問令牌請求令牌:P

if(empty($_GET["oauth_token"])) { 
    $_SESSION["token_secret"] = $oauthTokenSecret; 
    $_SESSION["oauth_token"] = $oauth_token; 

    echo '<script>window.location="'.$auth_url.'";</script>'; 
} 
else { 

    $oauth_token->key = urldecode($_GET["oauth_token"]); 
    $oauth_token->secret = $_SESSION["token_secret"]; 

    echo "<Br>"; 
    echo "<Br> FIRST OAUTH TOKEN: "; 
    echo $oauth_token->key; 

    echo "<Br>"; 
    echo "<Br> FIRST OAUTH TOKEN SECRET: "; 
    echo $oauth_token->secret; 

    print_r($_SESSION); 
    echo "<Br>"; 
    echo "<Br>"; 

    // GET https://www.google.com/accounts/OAuthGetAccessToken 
    $req = OAuthRequest::from_consumer_and_token($consumer, $oauth_token, 'GET', 
     $token_endpoint.'OAuthGetAccessToken', array('oauth_verifier' => $_GET['oauth_verifier'])); 

    $req->sign_request($sig_method, $consumer, $oauth_token, $privKey); 

    print_r($req); 

    $response = send_signed_request('GET', $token_endpoint.'OAuthGetAccessToken', array($req->to_header())); 

@Rafal - 我將確保你獲得2單獨的令牌(一個用於初始請求,另一個用於訪問)。另外需要注意的是,使用新的令牌/密鑰重新生成新簽名非常重要,因爲如果保持相同,它會返回「無效簽名」。

由於在此過程中需要重定向,因此必須將初始令牌密碼保留在SESSION變量中。用戶返回到應用程序後,URL中將返回oauth_token,但令牌密鑰不會。您必須將其存儲在往返完成後可訪問的變量中。

如果你想在會話中存儲整個的oauth_token對象確保你實例化對象之前,你的「在session_start()」

$oauth_token = new OAuthToken($oauthToken, $oauthTokenSecret); 

session_start(); 

否則,當你重新打印,您將收到一個「完全的對象」警告從SESSION收到的令牌。我在這個項目上花了很長時間,並且深入參與了OAuth。請隨時問我任何問題,拉法爾。