2011-08-11 2 views
0

3 일 동안 자체 oAuth 메소드 구현. 계속 걸림 거리를 유지하십시오. 더 이상 문제와 관련하여 어떤 변수가 사용되는지 확실하지 않습니다. 신선한 눈과 적절한 조언이 필요합니다. Google이 'Invalid Token'외부에서 더 구체적 이었으면 좋겠습니다. NO token secret로 요청에 서명 할 수 있으며 여전히 동일한 오류가 발생합니다. 따라서 서명이 여전히 유효하지 않거나 미친 요청이 너무 많으면 확실하지 않습니다. 나는 모른다. 절대적으로 실망 스럽습니다. 권한을 부여 할 수있는 사용자를 리디렉션하기 전에 (디코딩) 내 요청 토큰 데이터를 얻고, 데이터베이스에 저장Google Access Token Request : 유효하지 않은 토큰/서명

:

는 여기에 내가 일을해야한다고 생각 코드 내 최신 시도이다.

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을 확인하십시오.