2011-08-11 59 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