Запрос токена доступа Google: неверный токен/подпись

Уже три дня я занимаюсь реализацией моих собственных методов Google oAuth. Продолжайте бить коряги. Не уверен, какие переменные больше влияют на проблему. Мне нужен свежий взгляд и правильный совет. Я бы хотел, чтобы 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

person Francis Wertz    schedule 11.08.2011    source источник


Ответы (1)


К сожалению, вы были правы, когда дважды кодировали свой токен, и, что хуже всего, вы должны были сделать это и для своего верификатора!

Чтобы помочь вам в создании вашей подписи, обязательно ознакомьтесь с документацией vimeo.

person jukebox777    schedule 07.10.2011