2011-08-11 3 views
0

J'ai commencé à mettre en œuvre mes propres méthodes Google oAuth pendant trois jours. Continuez à frapper les chicots. Vous ne savez plus quelles variables sont en jeu avec le problème. J'ai besoin de nouveaux yeux et de bons conseils. Je souhaite Google était plus spécifique en dehors de 'Invalid Token'. Je peux signer la demande avec NO secret secret et j'obtiendrai toujours la même erreur. Donc je ne sais pas si ma signature est toujours invalide ou si j'ai fait trop de demandes. Je n'ai aucune idée. C'est absolument frustrant.Demande de jeton Google Access: jeton/signature non valide

Voici ma dernière tentative avec le code que je pense devrait fonctionner:

Je reçois ma demande de données jeton, et le stocker dans une base de données (décodé) avant de rediriger l'utilisateur d'autoriser. Je prends les trois et les passe dans ma méthode pour obtenir un jeton d'accès. J'ai découvert que je doublais mon jeton, ce qui causait l'invalidité du jeton. Maintenant, je reçois à nouveau la signature invalide habituelle. Je ne suis pas vraiment sûr de comment.

méthode jeton d'accès:

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 

Répondre

0

Malheureusement, vous aviez raison quand vous étiez à double encodage de votre jeton, et pire, tu dois le faire pour votre vérificateur aussi!

Pour vous aider dans la construction de votre signature, assurez-vous de vérifier le vimeo documentation.

Questions connexes