web-dev-qa-db-de.com

Holen Sie sich Refresh-Token Google API

Ich kann mein Aktualisierungstoken nicht mit meinem Code erhalten. Ich kann nur meinen Zugriffstoken, Token-Typ usw. erhalten. Ich habe einige Tutorials wie das Setzen von access_type=offline auf meiner Anmelde-URL:

echo "<a href='https://accounts.google.com/o/oauth2/auth?" 
    . "access_type=offline&client_id=123345555.apps.googleusercontent.com& "
    . "scope=https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/plus.me&response_type=code& "
    . "redirect_uri=http://www.sample.com/sample.php&state=/profile'>Google</a>";

und meine Felder beim Abrufen des Zugriffstokens:

$fields=array(
    'code'=>  urlencode($authcode),
    'client_id'=> urlencode($clientid),
    'client_secret'=> urlencode($clientsecret),
    'redirect_uri'=> urlencode($redirecturi),
    'grant_type'=> 'authorization_code',
);

aber ich kann nicht bekommen refresh_token, nur die access_token, token_type, id_token und expires_in.

71

Finden Sie es heraus, indem Sie dies zu Ihren URL-Parametern hinzufügen

approval_Prompt = erzwingen

97

Wenn ich die Antwort von ser987361 erweitern darf:

Aus dem Abschnitt Offline-Zugriff der OAuth2.0-Dokumentation:

Wenn Ihre Anwendung ein Aktualisierungstoken erhält, ist es wichtig, dieses Aktualisierungstoken für die zukünftige Verwendung zu speichern. Wenn Ihre Anwendung das Aktualisierungstoken verliert, muss der Benutzer erneut zur Einwilligung aufgefordert werden, bevor ein weiteres Aktualisierungstoken abgerufen werden kann. Wenn Sie den Benutzer erneut zur Einwilligung auffordern müssen, fügen Sie den Parameter approval_Prompt In die Berechtigungscode-Anforderung ein und setzen Sie den Wert auf force.

Wenn Sie bereits Zugriff gewährt haben, geben nachfolgende Anforderungen für einen grant_type Von authorization_code Den refresh_token Nicht zurück, selbst wenn access_type Auf offline in der Abfragezeichenfolge der Einwilligungsseite.

Wie im obigen Zitat angegeben, müssen Sie Ihren Benutzer zurückschicken, um einen neuen refresh_token Zu erhalten, nachdem Sie bereits einen erhalten haben über die Eingabeaufforderung, die Sie ausführen können, indem Sie approval_Prompt auf force setzen.

Prost,

PS Diese Änderung wurde auch in einem Blogpost angekündigt.

58
bossylobster

Es ist access_type=offline das du willst.

Dies gibt das Aktualisierungstoken zurück, wenn der Benutzer die App zum ersten Mal autorisiert. Nachfolgende Anrufe zwingen Sie nicht dazu, die App erneut zu genehmigen (approval_Prompt=force).

Weitere Informationen finden Sie unter: https://developers.google.com/accounts/docs/OAuth2WebServer#offline

12
Elliot Coad

Dies ist vollständiger Code in PHP mit dem offiziellen Google SDK

$client = new Google_Client();
## some need parameter
$client->setApplicationName('your application name');
$client->setClientId('****************');
$client->setClientSecret('************');
$client->setRedirectUri('http://your.website.tld/complete/url2redirect');
$client->setScopes('https://www.googleapis.com/auth/userinfo.email');
## these two lines is important to get refresh token from google api
$client->setAccessType('offline');
$client->setApprovalPrompt('force'); # this line is important when you revoke permission from your app, it will Prompt google approval dialogue box forcefully to user to grant offline access
10

Für unsere App mussten wir beide Parameter verwenden access_type=offline&Prompt=consent. approval_Prompt=forcehat nicht funktioniert für uns

6
Ricky

Hallo, ich habe die folgenden Schritte ausgeführt und konnte das Aktualisierungstoken abrufen.

Der Autorisierungsablauf besteht aus zwei Schritten.

  1. Ist, um den Autorisierungscode mit https://accounts.google.com/o/oauth2/auth? URL zu erhalten.

    Dazu wird eine Post-Anfrage mit folgenden Parametern gesendet. 'scope=' + SCOPE + '&client_id=' + CLIENTID + '&redirect_uri=' + REDIRECT + '&response_type=' + TYPE + '&access_type=offline' Wenn Sie oben angeben, erhalten Sie einen Autorisierungscode.

  2. AcessToken und RefreshToken werden mit der URL https://accounts.google.com/o/oauth2/token? Abgerufen. Dazu wird eine Post-Anfrage mit folgenden Parametern gesendet.

    "code": code, "client_id": CID, "client_secret": CSECRET, "redirect_uri": REDIRECT, "grant_type": "authority_code",

Sobald Sie die Berechtigungen autorisiert haben, können Sie bei Ihrem ersten Versuch das Aktualisierungstoken abrufen. Bei nachfolgenden Versuchen wird das Aktualisierungstoken nicht bereitgestellt. Wenn Sie das Token erneut verwenden möchten, können Sie den Zugriff in Ihrer Anwendung widerrufen.

Hoffe das wird jemandem helfen Prost :)

5
dnWick

OAuth bietet im Real-Modus zwei Szenarien. Die normale und Standardzugriffsart wird online genannt. In einigen Fällen muss Ihre Anwendung möglicherweise auf eine Google-API zugreifen, wenn der Nutzer nicht anwesend ist. In Offlineszenarien wird beim ersten Austausch des Autorisierungscodes ein Aktualisierungstoken abgerufen.

Sie können also referenz_token in einigen Szenarien erhalten, nicht in allen.

sie können den Inhalt in https://developers.google.com/identity/protocols/OAuth2WebServer#offline haben.

4
Julian89757

Verwenden Sie seit März 2016 Prompt=consent, Um das Google API-Aktualisierungstoken neu zu generieren.

Wie in https://github.com/googleapis/oauth2client/issues/45 erwähnt,

approved_Prompt = force wurde durch Prompt=none|consent|select_account ersetzt

1
Finwe