Frage

Ich versuche OAuth 2.0 für die Google + API auf meiner Website zu verwenden, und ich bekomme immer wieder:

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

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

  1. Lassen Sie den Benutzer die Anfrage autorisieren.
  2. Ruft Anforderungscode von Google ab.
  3. Verwendet cUrl So fordern Sie Zugriffstoken mit dem Anforderungscode von Google an.
  4. Steckt den Zugriffscode in eine PHP -Sitzung.
  5. leitet auf die Hauptseite zurück.
  6. Die Hauptseite erkennt, dass die Sitzungsvariable festgelegt wird und nicht den Anmeldungslink angezeigt wird.
  7. PHP auf der Hauptseite verwendet readFile Um die JSON -Antwort von Google zu erhalten.
  8. Google gibt ungültige Anmeldeinformationen zurück.

Hier ist ein Beispiel, das von PHP erzeugt wird und in ReadFile eingefügt wird:

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

Hilfe bitte?

War es hilfreich?

Lösung

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

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

Andere Tipps

Sie sollten kein unveränderter Zugangs -Token teilen - jemand kann das verwenden, um Sie auszugeben (wirklich für wen auch immer es gewährt wurde).

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

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

Ich bin mir nicht sicher, ob dies unerlässlich ist, aber Ihre Fehlermeldung scheint einen Auth -Fehler im Header anzuzeigen, sodass Sie möglicherweise einen Autorisierungs -Header bereitstellen, der nicht mit dem, den Sie benötigen, übereinstimmen.

Hier ist eine Lösung mit PHPs Pecl Oauth Verlängerung. Die Anfrage unterschreibt die Art und Weise, wie Sie sie definiert haben. In diesem Fall in einem 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);

Ich hatte dieses Problem schon einmal mit Twitter.

Für OAuth kommunizieren wir tatsächlich zweimal mit dem Twitter und erwerben zunächst einen Anfragesteuer, um zweitens zu autorisieren, um das erste Token zu versenden, das bereits unterschrieben ist. Vielleicht überwinden Sie nur den 1..

Ich habe seit einigen Stunden den gleichen 401 "ungültigen Anmeldeinformationen" -Fehler erhalten. Als ich bemerkte, dass ich meine Access_Token in der Datenbank in einem Varchar (50) -Feld gespeichert habe. Es schnitt einen Teil des Access_Token ab. Ich erhöhte die Säulenlänge. FEST.

Überprüfen Sie die Länge des Feldes in der Datenbank, in der Sie Ihre Access_Token und auch Ihr request_token speichern!

Ich denke, die me API ist gebrochen. Das Problem ist weg, wenn ich versuche, einen URI mit einer echten Benutzer -ID anzufordern. Ich meine so: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}

Löschen Sie Ihre token.json Datei, dann versuchen Sie die Anfrage erneut.

Das Problem für mich war die "Autorisierung" der Header "Autorisierung" auf Get/Post -Anfrage:

Google -Dokumentation sagte: Autorisierung: / * OAuth 2.0 Token hier * /

Aber die richtige ist: Autorisierung: oAuth / * oAuth 2.0 Token hier * /

Ja! Fügen Sie "Eid" vor Ihrem Token -Schlüssel ein!

Wenn Sie Curl (PHP) verwenden, verwenden Sie:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top