9

Ich habe versucht, aktualisieren Token von Google API mit JavaScript Google Client "Code", dass Google von Client-Seite zurückzukehren. Es gibt mir den Code zurück, den ich an die Serverseite sende. Jetzt von Server-Seite ich den Code sende den Aktualisierungs-Token und Zugriffstoken mit Google-api-php-Client mit diesem Aufruf zu erhalten mit:Google API-Client-Code nicht zurück aktualisieren Token

https://www.googleapis.com/oauth2/v4/token 

Während ich den gleichen Code von Google Spielplatz nutzen i bekommen die Antwort mit als auch Aktualisierungs-Token aber ich bekomme es nicht von meinem eigenen Server .. Dies ist der Code

public function getRefreshToken($code) 
{ 
    $client = new Google_Client(); 
    $client->setClientId(config('services.google.client_id')); 
    $client->setClientSecret(config('services.google.client_secret')); 
    $client->setRedirectUri('postmessage'); 
    $client->setScopes(config('services.google.scopes')); 
    $client->setAccessType("offline"); 
    $client->setApprovalPrompt("force"); 
    dd($client->authenticate($code)); 
    dd($client->getRefreshToken()); 
    return ; 
} 

ich Zugangsart in einigen Antworten festgelegt habe, wie erwähnt offline, aber ich bekomme immer noch die Antwort mit unser Refresh Token .. das ist die Antwort

access_token :"xxxxxxxxxxxxxxxxxxxxxx" 
created:1510242052 
expires_in:3598 
id_token:"xxxxxxxx" 
token_type:"Bearer" 

Antwort

7

Ihr PHP-Code sieht gut aus für mich. Ich vermute, dass Ihr Front-End-Javascript, insbesondere der Link zu Google, dass es erstellt, kann daran schuld sein. Ob der Autorisierungscode beim Einlösen ein Aktualisierungstoken erstellt, hängt teilweise davon ab, welche Parameter im ursprünglichen Link zu Google enthalten sind.

Wie in this answer beschrieben, verwendet die JavaScript-Client-Bibliothek "clientseitige Ablauf". Normalerweise würden Sie in einer Frontend-App response_type=token angeben, aber wenn Sie response_type=code angeben, erhalten Sie stattdessen eine code zurück. Beim Einlösen erzeugt das code kein Aktualisierungstoken.

Zum Beispiel a link built by a front end javascript library könnte wie folgt aussehen:

https://accounts.google.com/o/oauth2/v2/auth?client_id=7xxxxxxxxxxx-xxxxxxxxxxx.apps.googleusercontent.com&redirect_uri=http://localhost:8080/oauth2callback.php&response_type=code&scope=profile 

Ihr hinteres Ende den code einlösen kann, die zurückkommt, aber die Antwort nicht ein Aktualisierungs-Token enthalten. Das ist Absicht.

Ein Weg, um eine code, die für Refresh-Tokens berechtigt ist, zu erhalten wäre, die Back-End-PHP-Client-Bibliothek zu verwenden, um den Link zu erstellen, anstatt die Javascript-Client-Bibliothek.

https://accounts.google.com/o/oauth2/auth?response_type=code&access_type = offline & client_id = 7xxxxxxxxxx-hxxxxxxxxxxxxxxxx.apps.googleusercontent.com & redirect_uri = http% 3A% 2F% 2Flocalhost% 3A8080% 2Foauth2callback.php & Zustand & -umfang: $client->createAuthUrl() einen Link wie folgt bauen = Profil & approval_prompt = force

This toy example den Link auf diese Weise baut und Refresh-Token erhält.

Beachten Sie die Hinzufügung von access_type=offine und approval_prompt=force. Nach erfolgreicher Authentifizierung enthält die Umleitung in diesem Fall eine code, die ein Refresh-Token bei der Einlösung zur Verfügung stellt.

Der OAuth 2.0-Spielplatz baut einen ersten Link auf, der access_type=offline und prompt=consent enthält, mit dem auch ein Code erstellt wird, der für ein Aktualisierungstoken einlösbar ist.

Wenn das nicht hilfreich ist, könnten Sie vielleicht die Frage mit dem Link zu Google aktualisieren, dass Ihr Frontend baut?(Mit Client-ID redacted, natürlich)

+0

Ich habe versucht, was Sie mich gebeten, ich bekomme einen Fehler "ORIGIN PARAMETER ERFORDERLICH" .. –

+0

Erhalten Sie jetzt ein Refresh-Token zurück? Wann erhalten Sie diesen Fehler? Wann gehen Sie zuerst zu Google? Wenn Sie 'authenticate()' aufrufen? Wenn Sie versuchen, das access_token tatsächlich zu verwenden? Dieser Fehler klingt wie ein Google Maps-API-Fehler .... ist das, was Sie zu konsumieren versuchen? –

+0

Ich habe hier zwei Dinge zu sagen. 1. Zuerst wird dies in keiner der Antworten hier auf Stack over Flow erwähnt, warum musste ich Kopfgeld auf diese Frage geben? es wurde nirgendwo geantwortet, noch hat niemand diese Frage beachtet. 2. In GOOGLE DOCUMENTS wird nichts dergleichen erwähnt. WARUM IST DAS SO ? –

Verwandte Themen