2013-09-02 2 views
8

Я пытаюсь использовать токен обновления из аутентификации веб-перенаправления oAuth2 в моем консольном скрипте perl. Идентификатор клиента тот же и правильный идентификатор клиента, который я использовал в своем javascript, и я проверил его в 5 раз, что он такой же, как у меня в моей консоли Google API.Google oAuth2 unauthorized_client by refresh_token

Клиентский секрет проверяется двумя, и это правильно.

Обновление экрана маркер был создан с approval_prompt=force&access_type=offline

Вот мой Perl пример кода я использую:

# ----------------------------------------------------------------------------------- 
my $CLIENT_ID  = 'XXXXX.apps.googleusercontent.com'; 
my $CLIENT_SECRET = 'YYYYYYYYYYY'; 
# ----------------------------------------------------------------------------------- 
# TESTING 
my $refresh_token = '1/is_5_minutes_old'; 
# ----------------------------------------------------------------------------------- 

my $string = ''; 
$string .= 'grant_type=refresh_token'; 
$string .= '&client_id=' . $CLIENT_ID; 
$string .= '&client_secret=' . $CLIENT_SECRET; 
$string .= '&refresh_token=' . $refresh_token; 

$ua = LWP::UserAgent->new; 

my $req = 
    HTTP::Request->new(POST => 'https://accounts.google.com/o/oauth2/token'); 
$req->content_type('application/x-www-form-urlencoded'); 
$req->content($string); 
print $string . "\n"; 
my $res = $ua->request($req); 
print $res->as_string; 

Отклик него:

HTTP/1.1 400 Bad Request 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Connection: close 
Date: Mon, 02 Sep 2013 10:50:26 GMT 
Pragma: no-cache 
Server: GSE 
Content-Type: application/json 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Alternate-Protocol: 443:quic 
Client-Date: Mon, 02 Sep 2013 10:50:26 GMT 
Client-Peer: 74.125.136.84:443 
Client-Response-Num: 1 
Client-SSL-Cert-Issuer: /C=US/O=Google Inc/CN=Google Internet Authority G2 
Client-SSL-Cert-Subject: /C=US/ST=California/L=Mountain View/O=Google Inc/CN=accounts.google.com 
Client-SSL-Cipher: RC4-SHA 
Client-SSL-Warning: Peer certificate not verified 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 

{ 
    "error" : "unauthorized_client" 
} 

я надеюсь, что у вас есть идея для Помогите.

ПОЗДРАВЛЕНИЯ

ответ

11

Invalid клиент обычно означает, что идентификатор клиента и секрет клиента не совпадают, или есть опечатка в одном из них (хотя вы упоминаете вы дважды проверили это!). Ничто в коде не выглядит неправильным.

При получении маркера обновления, вы могли бы попытаться поместить маркер доступа, который поставляется вместе с ней в tokeinfo конечную точку и убедившись, что значения для идентификатора клиента там совпадают с теми, которые вы задали с: https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=

Возможно, стоит отказаться от запроса, чтобы убедиться, что в нем нет ошибки (например, слишком короткий заголовок длины содержимого или аналогичный).

1

Сбрасывание запроса является ключевым. Чтобы помочь, вот один я испек ранее ..

==POST== 
https://accounts.google.com/o/oauth2/token 
refresh_token=1/_PEzU2m71wertwertwerJUtrtrytrytryf3trytryoCo 
&client_id=612222222225 
&client_secret=Q7334534543534yKLu 
&grant_type=refresh_token 

Вы используете короткую форму идентификатора клиента, т.е. просто номер?

Смежные вопросы