refresh_token Недопустимые ошибки учетных данных

Я в тупике. Я пытаюсь вручную получить токен обновления, чтобы загрузить токен доступа для меня в Mirror API с помощью Perl, и он продолжает выдавать мне ошибки учетных данных. Когда я загружаю точный HTTP-запрос в примере кода PHP (я распечатал HTTP для сравнения), тот же самый refresh_token работает нормально.

Вот мой HTTP-запрос Perl:

* POST https://accounts.google.com/o/oauth2/token Хост: account.google.com User-Agent: libwww-perl/6.02 Content-Length: 175 Content-Type: application/x-www-form-urlencoded client_id=client_id_goes_here&client_secret=client_secret_goes_here&refresh_token=refresh_token_goes_here&grant_type=refresh_token*

Вот PHP на том же Refresh_token:

*POST /o/oauth2/token HTTP/1.1 content-type: application/x-www-form-urlencoded content-length: 175 client_id=client_id_goes_here&client_secret=client_secret_goes_here&refresh_token=refresh_token_goes_here&grant_type=refresh_token*

Мой Перл выглядит так:

my $auth_response = $ua->request(POST 'https://accounts.google.com/o/oauth2/token',
            'Host'          => 'accounts.google.com',
            'Content_Type'  => 'application/x-www-form-urlencoded',
            'Content'       => [
                'client_id'         =>  $client_id,
                'client_secret'     =>  $client_secret,
                'refresh_token'     =>  $credentials->{'refresh_token'},
                'grant_type'        =>  'refresh_token',
            ],
        );

ПОМОЩЬ! :-)


person Jesse Stay    schedule 04.06.2013    source источник


Ответы (1)


Похоже, вы используете LWP. Я взломал этот быстрый пример, который использует LWP танцевать танец OAuth 2.0 с Google от начала до обновления токена.

Основываясь на моих экспериментах, код, который вы показали до сих пор, выглядит правильно. Вот точный код, который я использовал для обновления своего токена доступа:

my $auth_response = $ua->request(POST 'https://accounts.google.com/o/oauth2/token',
            'Host'          => 'accounts.google.com',
            'Content_Type'  => 'application/x-www-form-urlencoded',
            'Content'       => [
                'client_id'         =>  $client_id,
                'client_secret'     =>  $client_secret,
                'refresh_token'     =>  $refresh_token,
                'grant_type'        =>  'refresh_token',
            ],
        );

Если вы все еще наблюдаете ошибку, попробуйте клонировать этот репозиторий, заполнив свой client_id и client_secret и посмотреть, сохраняется ли проблема. Если это так, пожалуйста, поделитесь результатом print Dumper($auth_response);, который предоставит много полезной информации.

Кроме того, Perl официально не поддерживается Google, но, похоже, сообщество справилось: существует открытый исходный код клиентская библиотека Perl. Я никогда не использовал его раньше, но вы можете проверить его.

person mimming    schedule 05.06.2013
comment
Я считаю, что это была моя проблема в конце концов. Я выводил неправильные заголовки ответа (из предыдущего запроса в коде), поэтому я видел ошибку. Распечатка правильных заголовков ответов исправила это. Вы правы - это правильный код! Я все равно оставлю его здесь на случай, если кто-то еще ищет код для аутентификации Google Glass. - person Jesse Stay; 06.06.2013