412 Stimmen

Google OAuth Refresh-Token nicht erhalten

Ich möchte das Zugriffstoken von Google erhalten. Die Google API sagt dass Sie, um das Zugriffs-Token zu erhalten, den Code und andere Parameter an die Token-Generierungsseite senden, und die Antwort wird ein JSON-Objekt sein wie :

{
"access_token" : "ya29.AHES6ZTtm7SuokEB-RGtbBty9IIlNiP9-eNMMQKtXdMP3sfjL1Fc",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74"
}

Ich erhalte jedoch das Aktualisierungs-Token nicht. Die Antwort lautet in meinem Fall:

{
 "access_token" : "ya29.sddsdsdsdsds_h9v_nF0IR7XcwDK8XFB2EbvtxmgvB-4oZ8oU",
"token_type" : "Bearer",
"expires_in" : 3600
}

2voto

  • Um ein Refresh-Token mit postman zu erhalten, hier ein Beispiel für die Konfiguration

enter image description here

  • Erwartete Antwort

enter image description here

1voto

Verwendung von Offline-Zugriff y Aufforderung:Zustimmung hat für mich gut funktioniert:

   auth2 = gapi.auth2.init({
                    client_id: '{cliend_id}' 
   });

   auth2.grantOfflineAccess({prompt:'consent'}).then(signInCallback);

1voto

Martin Kask Punkte 11

Um bei jeder Authentifizierung ein neues refresh_token zu erhalten, sollte der Typ der im Dashboard erstellten OAuth 2.0-Anmeldeinformationen "Other" sein. Außerdem sollte, wie oben erwähnt, bei der Erstellung der authURL die Option access_type='offline' verwendet werden.

Wenn Sie Anmeldeinformationen vom Typ "Webanwendung" verwenden, funktioniert keine Kombination der Variablen prompt/approval_prompt - Sie erhalten das refresh_token nur bei der ersten Anfrage.

1voto

Anoop Isaac Punkte 932

Für mich habe ich ausprobiert CalendarSampleServlet bereitgestellt von Google. Nach 1 Stunde wird die zugang_schlüssel wird abgebrochen und auf eine 401-Seite umgeleitet. Ich habe alle oben genannten Optionen ausprobiert, aber sie haben nicht funktioniert. Schließlich überprüfte ich den Quellcode für AbstractAuthorizationCodeServlet'. Ich konnte sehen, dass die Umleitung deaktiviert wird, wenn Anmeldeinformationen vorhanden sind, aber idealerweise sollte es nach refresh token!=null . Ich habe den folgenden Code hinzugefügt CalendarSampleServlet und danach hat es funktioniert. Eine große Erleichterung nach so vielen Stunden der Frustration. Gott sei Dank.

if (credential.getRefreshToken() == null) {
    AuthorizationCodeRequestUrl authorizationUrl = authFlow.newAuthorizationUrl();
    authorizationUrl.setRedirectUri(getRedirectUri(req));
    onAuthorization(req, resp, authorizationUrl);
    credential = null;
}

0voto

Tran Tien Duc Punkte 53

Jetzt hatte Google diese Parameter in meiner Anfrage abgelehnt (access_type, prompt)... :( und es gibt überhaupt keine Schaltfläche "Zugriff widerrufen". Ich bin frustriert, weil ich meinen refresh_token zurückbekommen will lol

UPDATE: Ich habe die Antwort hier gefunden :D Sie können das Refresh-Token durch eine Anfrage zurückbekommen https://developers.google.com/identity/protocols/OAuth2WebServer

curl -H "Inhaltstyp:application/x-www https://accounts.google.com/o/oauth2/revoke?token= {Token}

Das Token kann ein Zugriffs-Token oder ein Refresh-Token sein. Handelt es sich bei dem Token um ein Zugriffstoken und hat es ein entsprechendes Refresh-Token, so wird auch das Refresh-Token widerrufen.

Wurde der Widerruf erfolgreich bearbeitet, lautet der Statuscode der Antwort 200. Bei Fehlern wird ein Statuscode 400 zusammen mit einem Fehlercode zurückgegeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X