2013-09-02 11 views
8

Sto provando a utilizzare un token di aggiornamento dall'autore di reindirizzamento web oAuth2 nello script perl della console. L'id del client è lo stesso ID client corretto che ho usato nel mio javascript e l'ho controllato 5 volte che è lo stesso che ho nella mia console dell'API di Google.Google oAuth2 unuthorized_client di refresh_token

Il segreto del client viene controllato due ed è corretto.

Il token di aggiornamento è stato creato con approval_prompt=force&access_type=offline

Qui è il mio codice di esempio perl che uso:

# ----------------------------------------------------------------------------------- 
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; 

La risposta di esso:

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" 
} 

spero che tu abbia un'idea per Aiuto.

greatings

risposta

11

cliente non valido di solito significa che l'ID cliente e segreto client non corrispondono, o c'è un errore di battitura in uno di essi (anche se si parla di aver doppio controllato questo!). Nulla nel tuo codice sembra sbagliato.

Quando si recupera il token di aggiornamento, si potrebbe provare a mettere il token di accesso che viene con esso nella endpoint tokeinfo e assicurandosi che i valori per l'ID cliente non corrispondono a quelli che avete configurato con: https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=

Potrebbe valere la pena di scaricare la richiesta per assicurarsi che non ci sia un errore in questo (per esempio un'intestazione di lunghezza del contenuto troppo breve o simile).

1

Il dump della richiesta è la chiave. Per aiutare, ecco uno che ho cotto in precedenza ..

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

Si sta utilizzando la forma abbreviata del client id, vale a dire. solo il numero?

Problemi correlati