invalid_grant versucht, ein oAuth-Token von Google zu erhalten

120

Ich erhalte immer wieder eine invalid_grantFehlermeldung, wenn ich versuche, ein oAuth-Token von Google zu erhalten, um eine Verbindung zu deren Kontakt-API herzustellen. Alle Informationen sind korrekt und ich habe dreifach überprüft, dass dies so verblüfft ist.

Weiß jemand, was dieses Problem verursachen kann? Ich habe versucht, eine andere Client-ID dafür einzurichten, aber ich erhalte das gleiche Ergebnis. Ich habe versucht, viele verschiedene Möglichkeiten zu verbinden, einschließlich des Erzwingens der erzwungenen Authentifizierung, aber immer noch das gleiche Ergebnis.

André Figueira
quelle
Für mich war das Problem auf der Seite mit den Anmeldeinformationen von Google ... ich habe eine andere erstellt ... und das Problem gelöst ...
costamatrix

Antworten:

59

Ich bin auf dieses Problem gestoßen, als ich beim Senden des Benutzers an die OAuth nicht explizit den "Offline" -Zugriff angefordert habe. "Möchten Sie dieser App die Erlaubnis geben, Ihre Inhalte zu berühren?" Seite.

Stellen Sie sicher, dass Sie in Ihrer Anfrage access_type = offline angeben.

Details hier: https://developers.google.com/accounts/docs/OAuth2WebServer#offline

(Außerdem: Ich denke, Google hat diese Einschränkung Ende 2011 hinzugefügt. Wenn Sie bereits alte Token haben, müssen Sie Ihre Benutzer auf die Berechtigungsseite senden, um die Offline-Verwendung zu autorisieren.)

Bonkydog
quelle
9
@Adders Ich stimme zu. Ich setze access_typeauf offline, dieser Fehler immer noch geschieht.
Slideshowp2
Dies sollte nicht die akzeptierte Antwort sein.
Kishan Solanki
Sehen Sie sich diese Dokumentation zu developer.google.com/android-publisher/authorization an und lesen Sie alles, was implementiert werden soll
Kishan Solanki
70

Ich bin auf dasselbe Problem access_typegestoßen, obwohl ich in meiner Anfrage das "Offline" gemäß der Antwort von bonkydog angegeben habe. Kurz gesagt, ich habe festgestellt, dass die hier beschriebene Lösung für mich funktioniert:

https://groups.google.com/forum/#!topic/google-analytics-data-export-api/4uNaJtquxCs

Wenn Sie einen OAuth2-Client in die Konsole Ihrer Google API einfügen, erhalten Sie von Google im Wesentlichen eine "Client-ID" und eine "E-Mail-Adresse" (vorausgesetzt, Sie wählen "Webapp" als Client-Typ aus). Und trotz der irreführenden Namenskonventionen von Google wird erwartet, dass Sie die "E-Mail-Adresse" als Wert des client_idParameters senden, wenn Sie auf die OAuth2-APIs zugreifen.

Dies gilt, wenn Sie beide URLs aufrufen:

Beachten Sie, dass der Aufruf der ersten URL erfolgreich ist, wenn Sie sie mit Ihrer "Kunden-ID" anstelle Ihrer "E-Mail-Adresse" aufrufen. Die Verwendung des von dieser Anforderung zurückgegebenen Codes funktioniert jedoch nicht, wenn versucht wird, ein Inhaber-Token von der zweiten URL abzurufen. Stattdessen erhalten Sie eine 'Fehler 400' und eine "invalid_grant" Nachricht.

Aroth
quelle
66
Absolut lächerlich: Besonders der Teil, in dem es mit der client_id funktioniert, wenn Sie ein erstes Aktualisierungstoken erhalten. Googles API und ihre Dokumentation ist ein Chaos.
Traubenfuchs
7
Ich habe so viele Stunden lang meinen Kopf gegen dieses Problem geschlagen. Ich hätte nie erwartet, dass 'client_id' nicht das ist, was für das Feld 'client_id' erwartet wurde. Außer gelegentlich, wenn Sie ein refresh_token erhalten und es funktioniert. Ich bin mir ziemlich sicher, dass die Wörter, die ich momentan für Google habe, nicht auf SO gesagt werden können.
Justin
6
Hallo zusammen. Ich kann die "E-Mail" -Adresse, über die ihr redet, nicht finden. Dies ist, was ich in meiner Konsole habe -> pbs.twimg.com/media/CVVcEBWUwAAIiCy.png:large
Omarojo
4
Wo ist diese E-Mail-Adresse? Ich habe das gleiche Problem
Isma Haro
4
Vertrauen Sie niemals der Google-Dokumentation. Die schlechtesten Dokumentationen und APIs stammen von Google, dem wertvollsten Unternehmen der Welt. Ich musste unzählige Stunden damit verbringen, die Google API zu verwenden. Es gab Probleme nach Problemen und dann ihre eigenen .NET-Bibliotheken für verschiedene APIs, die aufgrund unterschiedlicher Abhängigkeitsprobleme und aller nicht zusammen kompiliert wurden. Der Code funktioniert jetzt für die meisten Benutzer gut, aber für einige Benutzer erhalte ich immer noch invalid_grant, invalid_credentials usw. ohne besondere Gründe.
Allen King
56

Obwohl dies eine alte Frage ist, scheinen viele noch immer darauf zu stoßen - wir haben Tage damit verbracht, dies selbst aufzuspüren.

In der OAuth2-Spezifikation ist "invalid_grant" eine Art Sammelbegriff für alle Fehler im Zusammenhang mit ungültigen / abgelaufenen / widerrufenen Token (Auth Grant oder Refresh Token).

Für uns gab es zwei Probleme:

  1. Der Nutzer hat den Zugriff auf unsere App aktiv widerrufen.
    Sinnvoll, aber erhalten Sie Folgendes: 12 Stunden nach dem Widerruf sendet Google die Fehlermeldung nicht mehr in seiner Antwort: “error_description” : “Token has been revoked.”
    Es ist eher irreführend, da Sie davon ausgehen, dass die Fehlermeldung jederzeit vorhanden ist, was nicht der Fall ist der Fall. Auf der Berechtigungsseite für Apps können Sie überprüfen, ob Ihre App noch Zugriff hat .

  2. Der Nutzer hat sein Google-Passwort zurückgesetzt / wiederhergestellt
    Im Dezember 2015 hat Google sein Standardverhalten geändert, sodass das Zurücksetzen des Passworts für Nicht-Google Apps-Nutzer automatisch alle Apps-Aktualisierungstoken des Nutzers widerruft. Beim Widerruf folgt die Fehlermeldung der gleichen Regel wie zuvor, sodass Sie die "error_description" erst in den ersten 12 Stunden erhalten. Es scheint keine Möglichkeit zu geben, zu wissen, ob der Benutzer den Zugriff manuell widerrufen hat (absichtlich) oder ob dies aufgrund eines Zurücksetzens des Kennworts geschehen ist (Nebeneffekt).

Abgesehen von diesen gibt es eine Vielzahl anderer möglicher Ursachen, die den Fehler auslösen könnten:

  1. Die Uhr des Servers ist nicht synchron
  2. Nicht für den Offline-Zugriff autorisiert
  3. Von Google gedrosselt
  4. Verwenden abgelaufener Aktualisierungstoken
  5. Der Benutzer ist seit 6 Monaten inaktiv
  6. Verwenden Sie die E-Mail des Servicemitarbeiters anstelle der Client-ID
  7. Zu viele Zugriffstoken in kurzer Zeit
  8. Das Client-SDK ist möglicherweise veraltet
  9. Falsches / unvollständiges Aktualisierungstoken

Ich habe einen kurzen Artikel geschrieben, in dem die einzelnen Elemente mit einigen Debugging-Anleitungen zusammengefasst sind, um den Schuldigen zu finden. Ich hoffe es hilft.

lander
quelle
1
Ein anderes Szenario ist, wenn Sie versuchen, Token mehrmals aus demselben Authentifizierungscode abzurufen.
bekanntasilya
Das war genau mein Problem, einfach die App versehentlich zu widerrufen. Dann musste die Datei refreshToken.php über das Terminal erneut ausgeführt werden, um einen weiteren Autorisierungscode zu generieren, und dann wurde das refreshToken für diese clientID überall ersetzt.
Robert Sinclair
7

Ich bin auf das gleiche Problem gestoßen. Für mich habe ich dies behoben, indem ich anstelle der Client-ID für den Parameterwert client_id die E-Mail-Adresse (die Zeichenfolge, die mit ... @ developer.gserviceaccount.com endet) verwendet habe. Die von Google festgelegte Benennung ist hier verwirrend.

Tony Vu
quelle
6
Dies ist die gleiche Antwort von @aroth mehr als ein Jahr zuvor
Bryan Ash
3

Mein Problem war, dass ich diese URL verwendet habe:

https://accounts.google.com/o/oauth2/token

Wann hätte ich diese URL verwenden sollen:

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

Hiermit wurde ein Dienstkonto getestet, das Offline-Zugriff auf die Speicher-Engine wünschte .

Brad Lee
quelle
2

Ich hatte die gleiche Fehlermeldung 'invalid_grant' und das lag daran, dass das von clientseitigem Javascript gesendete authResult ['code'] auf dem Server nicht korrekt empfangen wurde.

Versuchen Sie, es vom Server zurückzugeben, um festzustellen, ob es korrekt ist und keine leere Zeichenfolge.

Mihai Crăiță
quelle
1

Wenn Sie eine Schreibbibliothek verwenden, richten Sie einfach den Offline-Modus ein. Bonkydog schlägt hier den folgenden Code vor:

OAuthService service = new ServiceBuilder().provider(Google2Api.class).apiKey(clientId).apiSecret(apiSecret)
                .callback(callbackUrl).scope(SCOPE).offline(true)
                .build();

https://github.com/codolutions/scribe-java/

Oleksii Kyslytsyn
quelle
1

Bei Verwendung einer Android-Client-ID (kein client_secret) wurde die folgende Fehlerantwort angezeigt:

{
 "error": "invalid_grant",
 "error_description": "Missing code verifier."
}

Ich kann keine Dokumentation für das Feld 'code_verifier' finden, aber ich habe festgestellt, dass dieser Fehler behoben wird, wenn Sie es sowohl in der Autorisierungs- als auch in der Token-Anforderung auf gleiche Werte setzen. Ich bin nicht sicher, was der beabsichtigte Wert sein soll oder ob er sicher sein soll. Es hat eine Mindestlänge (16? Zeichen), aber ich fand, dass die Einstellung nullauch funktioniert.

Ich verwende AppAuth für die Autorisierungsanforderung in meinem Android-Client, der eine setCodeVerifier()Funktion hat.

AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
                                    serviceConfiguration,
                                    provider.getClientId(),
                                    ResponseTypeValues.CODE,
                                    provider.getRedirectUri()
                            )
                            .setScope(provider.getScope())
                            .setCodeVerifier(null)
                            .build();

Hier ist ein Beispiel für eine Tokenanforderung im Knoten:

request.post(
  'https://www.googleapis.com/oauth2/v4/token',
  { form: {
    'code': '4/xxxxxxxxxxxxxxxxxxxx',
    'code_verifier': null,
    'client_id': 'xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com',
    'client_secret': null,
    'redirect_uri': 'com.domain.app:/oauth2redirect',
    'grant_type': 'authorization_code'
  } },
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log('Success!');
    } else {
      console.log(response.statusCode + ' ' + error);
    }

    console.log(body);
  }
);

Ich habe getestet und das funktioniert mit beiden https://www.googleapis.com/oauth2/v4/tokenund https://accounts.google.com/o/oauth2/token.

Wenn Sie GoogleAuthorizationCodeTokenRequeststattdessen verwenden:

final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
                    TRANSPORT,
                    JSON_FACTORY,
                    getClientId(),
                    getClientSecret(),
                    code,
                    redirectUrl
);
req.set("code_verifier", null);          
GoogleTokenResponse response = req.execute();
Justin Fiedler
quelle
1

Dies ist eine dumme Antwort, aber das Problem für mich war, dass ich nicht realisierte, dass mir bereits ein aktives oAuth-Token für meinen Google-Nutzer ausgestellt wurde, das ich nicht speichern konnte. In diesem Fall besteht die Lösung darin, zur API-Konsole zu gehen und das Client-Geheimnis zurückzusetzen.

Zu diesem Zweck gibt es zahlreiche andere Antworten auf SO, z. B. Client Secret OAuth2 zurücksetzen - Müssen Clients den Zugriff erneut gewähren?

paul
quelle
1

Möglicherweise müssen Sie eine veraltete / ungültige OAuth-Antwort entfernen.

Credit: node.js google oauth2 sample funktioniert nicht mehr invalid_grant

Hinweis : Eine OAuth-Antwort wird auch ungültig, wenn das in der Erstautorisierung verwendete Kennwort geändert wurde.

In einer Bash-Umgebung können Sie die veraltete Antwort wie folgt entfernen:

rm /Users/<username>/.credentials/<authorization.json>

Lindauson
quelle
1

Es gibt zwei Hauptgründe für den Fehler invalid_grant , die Sie vor der POST-Anforderung für das Aktualisierungstoken und das Zugriffstoken berücksichtigen müssen.

  1. Der Anforderungsheader muss "Inhaltstyp: application / x-www-form-urlencoded" enthalten.
  2. Ihre Anforderungsnutzdaten sollten URL-codierte Formulardaten sein, nicht als JSON-Objekt senden.

RFC 6749 OAuth 2.0 hat invalid_grant wie folgt definiert : Die bereitgestellte Berechtigungsgewährung (z. B. Berechtigungscode, Anmeldeinformationen des Ressourcenbesitzers) oder das Aktualisierungstoken ist ungültig, abgelaufen, widerrufen, stimmt nicht mit dem in der Autorisierungsanforderung verwendeten Umleitungs-URI überein oder wurde an einen anderen Client ausgegeben .

Ich habe einen weiteren guten Artikel gefunden, hier finden Sie viele andere Gründe für diesen Fehler.

https://blog.timekit.io/google-oauth-invalid-grant-nightmare-and-how-to-fix-it-9f4efaf1da35

Hisham Javed
quelle
Wollten Sie zwei nahezu identische Antworten veröffentlichen? Möglicherweise möchten Sie diese löschen, da die andere eine zusätzliche Zeile enthält.
Blastfurnace
0

auf dieser Site console.developers.google.com

Diese Konsolenplatine wählt Ihr Projekt aus und gibt die Eid-URL ein. Die oauth-Rückruf-URL wird umgeleitet, wenn der oauth-Erfolg erfolgreich ist

user5699596
quelle
0

Nach Prüfung und hier alle anderen Möglichkeiten versuchen , hier ist, wie ich das Problem in NodeJS mit dem gelöst googleapisModul in Verbindung mit dem requestModul, das ich zu holen verwendet , um die Stelle der bereitgestellten Token - getToken()Methode:

const request = require('request');

//SETUP GOOGLE AUTH
var google = require('googleapis');
const oAuthConfigs = rootRequire('config/oAuthConfig')
const googleOAuthConfigs = oAuthConfigs.google

//for google OAuth: https://github.com/google/google-api-nodejs-client
var OAuth2 = google.auth.OAuth2;
var googleOAuth2Client = new OAuth2(
    process.env.GOOGLE_OAUTH_CLIENT_ID || googleOAuthConfigs.clientId, 
    process.env.GOOGLE_OAUTH_CLIENT_SECRET || googleOAuthConfigs.clientSecret, 
    process.env.GOOGLE_OAUTH_CLIENT_REDIRECT_URL || googleOAuthConfigs.callbackUrl);

/* generate a url that asks permissions for Google+ and Google Calendar scopes
https://developers.google.com/identity/protocols/googlescopes#monitoringv3*/
var googleOAuth2ClientScopes = [
    'https://www.googleapis.com/auth/plus.me',
    'https://www.googleapis.com/auth/userinfo.email'
];

var googleOAuth2ClientRedirectURL = process.env.GOOGLE_OAUTH_CLIENT_REDIRECT_URL || googleOAuthConfigs.callbackUrl; 

var googleOAuth2ClientAuthUrl = googleOAuth2Client.generateAuthUrl({
  access_type: 'offline', // 'online' (default) or 'offline' (gets refresh_token)
  scope: googleOAuth2ClientScopes // If you only need one scope you can pass it as string
});

//AFTER SETUP, THE FOLLOWING IS FOR OBTAINING TOKENS FROM THE AUTHCODE


        const ci = process.env.GOOGLE_OAUTH_CLIENT_ID || googleOAuthConfigs.clientId
        const cs = process.env.GOOGLE_OAUTH_CLIENT_SECRET || googleOAuthConfigs.clientSecret
        const ru = process.env.GOOGLE_OAUTH_CLIENT_REDIRECT_URL || googleOAuthConfigs.callbackUrl
        var oauth2Client = new OAuth2(ci, cs, ru);

        var hostUrl = "https://www.googleapis.com";
        hostUrl += '/oauth2/v4/token?code=' + authCode + '&client_id=' + ci + '&client_secret=' + cs + '&redirect_uri=' + ru + '&grant_type=authorization_code',
        request.post({url: hostUrl}, function optionalCallback(err, httpResponse, data) {
            // Now tokens contains an access_token and an optional refresh_token. Save them.
            if(!err) {
                //SUCCESS! We got the tokens
                const tokens = JSON.parse(data)
                oauth2Client.setCredentials(tokens);

                //AUTHENTICATED PROCEED AS DESIRED.
                googlePlus.people.get({ userId: 'me', auth: oauth2Client }, function(err, response) {
                // handle err and response
                    if(!err) {
                        res.status(200).json(response);
                    } else {
                        console.error("/google/exchange 1", err.message);
                        handleError(res, err.message, "Failed to retrieve google person");
                    }
                });
            } else {
                console.log("/google/exchange 2", err.message);
                handleError(res, err.message, "Failed to get access tokens", err.code);
            }
        });

Ich verwende einfach request, um die API-Anfrage über HTTP zu stellen, wie hier beschrieben: https://developers.google.com/identity/protocols/OAuth2WebServer#offline

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=8819981768.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://oauth2.example.com/code&
grant_type=authorization_code
lwdthe1
quelle
0

Versuchen Sie, Ihre URL für erforderlich zu ändern

https://www.googleapis.com/oauth2/v4/token
Sergiy Voytovych
quelle
0

Für zukünftige Leute ... Ich habe viele Artikel und Blogs gelesen, hatte aber Glück mit der Lösung unten ...

GoogleTokenResponse tokenResponse =
      new GoogleAuthorizationCodeTokenRequest(
          new NetHttpTransport(),
          JacksonFactory.getDefaultInstance(),
          "https://www.googleapis.com/oauth2/v4/token",
          clientId,
          clientSecret,
          authCode,
          "") //Redirect Url
     .setScopes(scopes)
     .setGrantType("authorization_code")
     .execute();

Dieser Blog zeigt verschiedene Fälle, in denen der Fehler "invalid_grant" auftritt.

Genießen!!!

Kanishk Gupta
quelle
0

Für mich musste ich sicherstellen, dass das redirect_urigenau mit dem in der Entwicklerkonsole übereinstimmt, das Authorised redirect URIses für mich behoben hat. Ich konnte nach dem Wechsel von https://accounts.google.com/o/oauth2/tokenzu debuggen und wissen, was genau das Problem war https://www.googleapis.com/oauth2/v4/token

Ich habe einen richtigen Fehler erhalten:

{"error": "redirect_uri_mismatch",  "error_description": "Bad Request"}
Waqleh
quelle
0

Ich hatte dieses Problem, nachdem ich eine neue Dienst-API auf der Google-Konsole aktiviert und versucht hatte, die zuvor erstellten Anmeldeinformationen zu verwenden.

Um das Problem zu beheben, musste ich auf die Berechtigung Seite zurückzukehren, auf dem Berechtigungsnachweis Namen klicken, und klicken Sie auf „Speichern“ wieder . Danach konnte ich mich gut authentifizieren.

Kimphamg
quelle
0

In meinem Fall war das Problem in meinem Code. Ich habe fälschlicherweise zweimal versucht, den Client mit denselben Token zu initiieren. Wenn keine der oben genannten Antworten dazu beigetragen hat, stellen Sie sicher, dass Sie keine 2 Instanzen des Clients generieren.

Mein Code vor dem Fix:

def gc_service
      oauth_client = Signet::OAuth2::Client.new(client_options)
      oauth_client.code = params[:code]
      response = oauth_client.fetch_access_token!
      session[:authorization] = response
      oauth_client.update!(session[:authorization])

      gc_service = Google::Apis::CalendarV3::CalendarService.new
      gc_service.authorization = oauth_client

      gc_service
    end
primary_calendar_id = gc_service.list_calendar_lists.items.select(&:primary).first.id

gc_service.insert_acl(primary_calendar_id, acl_rule_object, send_notifications: false)

sobald ich es ändere auf (benutze nur eine Instanz):

@gc_service = gc_service
primary_calendar_id = @gc_service.list_calendar_lists.items.select(&:primary).first.id

@gc_service.insert_acl(primary_calendar_id, acl_rule_object, send_notifications: false)

Es hat meine Probleme mit dem Grant-Typ behoben.

Kate Kasinskaya
quelle
0

Für mich bestand das Problem darin, dass ich mehrere Clients in meinem Projekt hatte und ich bin mir ziemlich sicher, dass dies vollkommen in Ordnung ist, aber ich habe den gesamten Client für dieses Projekt gelöscht und einen neuen erstellt und alle haben begonnen, für mich zu arbeiten (Ich habe diese Idee für die WP_SMTP-Plugin-Hilfe erhalten Support-Forum) Ich kann diesen Link nicht als Referenz finden

Subrata Fouzdar
quelle
0

Wenn Sie Benutzereingaben bereinigen (z. B. $_GET["code"]in PHP) Stellen Sie sicher, dass Sie nicht versehentlich etwas im Code ersetzen.

Der Regex, den ich benutze, ist jetzt /[^A-Za-z0-9\/-]/

Nathanfranke
quelle
0

Schauen Sie sich diese https://dev.to/risafj/beginner-s-guide-to-oauth-understanding-access-tokens-and-authorization-codes-2988 an

Zuerst benötigen Sie ein access_token:

$code = $_GET['code'];

$clientid = "xxxxxxx.apps.googleusercontent.com";
$clientsecret = "xxxxxxxxxxxxxxxxxxxxx";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.googleapis.com/oauth2/v4/token");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "client_id=".urlencode($clientid)."&client_secret=".urlencode($clientsecret)."&code=".urlencode($code)."&grant_type=authorization_code&redirect_uri=". urlencode("https://yourdomain.com"));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);

$server_output = json_decode($server_output);
$access_token = $server_output->access_token;
$refresh_token = $server_output->refresh_token;
$expires_in = $server_output->expires_in;

Sichern Sie das Zugriffstoken und das Aktualisierungstoken sowie das expire_in in einer Datenbank. Das Zugriffstoken läuft nach $ expires_in Sekunden ab. Dann müssen Sie ein neues Zugriffstoken mit der folgenden Anforderung abrufen (und in der Datenbank sichern):

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.googleapis.com/oauth2/v4/token");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "client_id=".urlencode($clientid)."&client_secret=".urlencode($clientsecret)."&refresh_token=".urlencode($refresh_token)."&grant_type=refresh_token");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);

$server_output = json_decode($server_output);
$access_token = $server_output->access_token;
$expires_in = $server_output->expires_in;

Denken Sie daran, die Domain redirect_uri Ihren Domains in Ihrer Google-Konsole hinzuzufügen: https://console.cloud.google.com/apis/credentials auf der Registerkarte "OAuth 2.0-Client-IDs". Dort finden Sie auch Ihre Client-ID und Client-Secret.

Konstantin XFlash Stratigenas
quelle
0

Es gibt eine undokumentierte Zeitüberschreitung zwischen der ersten Umleitung des Nutzers zur Google-Authentifizierungsseite (und der Rückgabe eines Codes) und der Annahme des zurückgegebenen Codes und der Veröffentlichung an die Token-URL. Es funktioniert gut für mich mit der tatsächlich von Google bereitgestellten client_id im Gegensatz zu einer "undokumentierten E-Mail-Adresse". Ich musste den Prozess nur erneut starten.

Sparkyspider
quelle
0

Wenn Sie dies in Postman / Insomnia testen und nur versuchen, es zum Laufen zu bringen, geben Sie an: Der Serverauthentifizierungscode (Codeparameter) ist nur einmal gut. Das heißt, wenn Sie einen der anderen Parameter in der Anforderung ausfüllen und eine 400 zurückerhalten, müssen Sie einen neuen Serverauthentifizierungscode verwenden, oder Sie erhalten nur eine weitere 400.

Jason Sultana
quelle