10 Stimmen

Lästige ungültige Anmeldeinformationen mit oauth 2.0 google + api

Ich versuche, oauth 2.0 für die Google+-Api auf meiner Website zu verwenden, und ich erhalte immer wieder diese Meldung:

{
    "error": {
        "errors": [{
            "domain": "global",
            "reason": "authError",
            "message": "Invalid Credentials",
            "locationType": "header",
            "location": "Authorization"
        }],
        "code": 401,
        "message": "Invalid Credentials"
    }
}

Die Sache ist die, dass ich nicht weiß, warum das passiert. Ich habe ein gültiges Zugriffstoken von Google, aber Google sagt, dass es ungültig ist. Ich weiß, dass das Token nicht abgelaufen ist, weil die json-Daten innerhalb von 10 Sekunden nach Erhalt des Zugriffstokens von Google angefordert werden. Hier ist der Prozess, den ich verwende:

  1. Benutzer zur Autorisierung der Anfrage auffordern.
  2. Ruft den Anfragecode von Google ab.
  3. Verwendet cUrl um das Zugriffs-Token mit dem Anfragecode von Google anzufordern.
  4. Setzt den Zugangscode in eine php-Sitzung ein.
  5. leitet zurück zur Hauptseite.
  6. Die Hauptseite erkennt, dass die Sitzungsvariable gesetzt ist und zeigt den Anmeldelink nicht an.
  7. Php auf der Hauptseite verwendet readFile um die json-Antwort von Google zu erhalten.
  8. Google gibt ungültige Anmeldedaten zurück.

Hier ist ein Beispiel für eine von php generierte Uri, die in readFile eingefügt wird:

https://www.googleapis.com/plus/v1/people/me?prettyprint=true&access_token=ya29.AHES6ZQRGovDa5FHsojU3qCM1DEnYmJPywz1muUE4CWGH5n70OcAkw

Hilfe, bitte?

2voto

Rob Russell Punkte 462

Sie sollten ein unverändertes Zugriffstoken nicht weitergeben - jemand kann sich damit für Sie ausgeben (eigentlich für denjenigen, dem es gewährt wurde).

Es ist auch besser, das Auth-Token als Header zu übergeben, wie:

curl -H "Authorization: OAuth ya29.xyzxyz" "https://www.googleapis.com/plus/v1/people/me"

Ich bin nicht sicher, ob das wichtig ist, aber Ihre Fehlermeldung scheint auf einen Autorisierungsfehler im Header hinzuweisen, so dass Sie möglicherweise einen Autorisierungsheader angeben, der nicht mit dem von Ihnen benötigten übereinstimmt.

2voto

Adgezaza Punkte 1675

Hier ist eine Lösung unter Verwendung der PHP-Funktion pecl oauth Erweiterung. Er wird den Antrag so unterschreiben, wie Sie ihn definiert haben. In diesem Fall in einer Konfigurationsdatei json Objekt, das in das Skript importiert wurde.

        $oauth = new OAuth($this->config->consumer_key, $this->config->consumer_secret, $this->config->signature_method, $this->config->auth_type);
        $oauth->setVersion($this->config->version);
        $oauth->setToken($accessToken->oauth_token, $accessToken->oauth_token_secret);

        $params = array(
            'fields' => 'displayName,emails,id,image,name',
            'pp' => 1
        );

        $oauth->fetch('https://www.googleapis.com/plus/v1/people/me', $params, OAUTH_HTTP_METHOD_GET);

        // extract response
        $json = Zend_Json::decode($oauth->getLastResponse(), Zend_Json::TYPE_OBJECT);

1voto

Chirag Shah Punkte 3654

Haben Sie einen der Google API-Clients ausprobiert? Es gibt Einstiegsanwendungen, mit denen Sie den Ball ins Rollen bringen können.

https://developers.google.com/+/Downloads

0voto

NineAllexis Punkte 52

Ich hatte dieses Problem schon einmal, allerdings mit Twitter.

Bei OAuth kommunizieren wir zweimal mit Twitter, zuerst, um das Anfrage-Token zu erhalten, und dann, um das Senden des ersten Tokens, das bereits signiert ist, zu autorisieren. Vielleicht überwinden Sie nur die 1st.

0voto

Seit einigen Stunden erhalte ich die gleiche Fehlermeldung 401 "Invalid Credentials". Dann ist mir aufgefallen, dass ich mein access_token in der Datenbank in einem VARCHAR(50)-Feld gespeichert habe. Dadurch wurde ein Teil des access_token abgeschnitten. Ich habe die Spaltenlänge erhöht. FIXED.

Überprüfen Sie die Länge des Feldes in der Datenbank, in der Sie Ihren access_token und auch Ihren refresh_token speichern!

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