2011-08-11 218 views
0

一直在倒戈實施我自己的Google oAuth方法三天。不斷打擊。不知道有什麼變數可以解決問題。我需要新鮮的眼睛和適當的建議。我希望Google在「無效令牌」之外更具體。我可以用NO token secret來簽署請求,但我仍然會得到同樣的錯誤。所以我不確定我的簽名是否仍然無效,或者我的瘋狂請求太多。我不知道。這是絕對令人沮喪的。Google訪問令牌請求:無效令牌/簽名

這裏是我的最新嘗試的代碼,我認爲應該工作:將用戶重定向到授權之前

我得到了我的請求令牌數據,並將其存儲在數據庫中(解碼)。

Token: 4/M1ZCp6Y115rBqxYz3v1Dq9bbTCrr 
Secret: f39Fuyg6MwlW35w4UIKNDBag 
Verifier: kZt189Tk7tTrTiodhhk_QOxX 

我把所有這三個,並將它們傳入我的方法來獲得訪問令牌。我發現我對令牌進行了雙重編碼,導致令牌無效。現在我再次得到通常的無效簽名。我並不確定如何。

訪問令牌方法:

public function oAuthGetAccessToken($authToken, $authTokenVerifier, $authTokenSecret) 
    { 
     $nonce = self::generateNonce(); 
     $time = time(); 
     $url = 'https://www.google.com/accounts/OAuthGetAccessToken'; 

    $authParams = array(
        'oauth_consumer_key' => 'anonymous', 
        'oauth_token' => $authToken, 
        'oauth_verifier' => $authTokenVerifier, 
        'oauth_signature_method' => 'HMAC-SHA1', 
        'oauth_timestamp' => $time, 
        'oauth_nonce' => $nonce, 
        'oauth_version' => '1.0' 
       ); 
    $baseString = self::getBaseString('GET', $url, $authParams); 

    $key = self::urlencodeRFC3986('anonymous') . '&' . self::urlencodeRFC3986($authTokenSecret); 

    $signature = self::hmacsha1($key, $baseString); 

    $postParams = array(
       'oauth_version' => '1.0', 
       'oauth_nonce' => $nonce, 
       'oauth_timestamp' => $time, 
       'oauth_consumer_key' => 'anonymous', 
       'oauth_token' => $authToken, 
       'oauth_verifier' => $authTokenVerifier, 
       'oauth_signature_method' => 'HMAC-SHA1', 
       'oauth_signature' => $signature 
       ); 

    $authHeaderString = ''; 
    foreach($postParams as $key => $value) 
    { 
     $authHeaderString .= $key .'="' . self::urlencodeRFC3986($value) . '", '; 
    } 

    $authHeaderString = rtrim($authHeaderString, ', '); 

    $headers = array('Authorization: OAuth ' . $authHeaderString); 

    $rest = new Rest(); 
    echo $rest->OAuthHttpGetRequest($url, $headers); 
} 



Base String: GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetAccessToken&oauth_consumer_key%3Danonymous%26oauth_nonce%3Dc0c072fadcc9e9de98e00f7478cd0607%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1313087177%26oauth_token%3D4%252FM1ZCp6Y115rBqxYz3v1Dq9bbTCrr%26oauth_verifier%3DkZt189Tk7tTrTiodhhk_QOxX%26oauth_version%3D1.0 

回答

0

可悲的是,你是對的,當你雙編碼您的令牌,和最差的,你必須這樣做你的驗證呢!

爲了幫助您構建您的簽名,請務必檢查vimeo documentation