Question

Je suis en train d'utiliser OAuth 2.0 pour Google + api sur mon site, et je continue à obtenir:

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

La chose est, je ne sais pas pourquoi cela se passe. J'ai un accès valide jeton de Google, mais Google est que ce soit raconte invalide. Je sais que le jeton n'a pas expiré, car les données JSON est la demande de Google dans les 10 secondes d'obtenir jeton d'accès. Voici le processus que j'utilise:

  1. Accéder à un utilisateur d'autoriser la demande.
  2. Obtient le code de requête de Google.
  3. Utilise cUrl pour demander l'accès jeton avec le code de requête de Google.
  4. Fait passer le code d'accès à une session php.
  5. Retour à la redirection page d'accueil.
  6. Page principale détecte variable de session est définie et ne présente pas le lien de connexion.
  7. Php sur la page principale des utilisations readFile pour obtenir la réponse JSON de Google.
  8. Google renvoie les informations d'identification non valides.

ici est un exemple uri généré par php qui est inséré dans readFile:

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

Aide s'il vous plaît?

Était-ce utile?

La solution

Avez-vous essayé l'un des clients de l'API Google? Il y a des applications démarrage vous pouvez utiliser pour obtenir le roulement à billes.

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

Autres conseils

Vous ne devez pas partager un jeton d'accès non modifié -. Quelqu'un peut l'utiliser pour usurper votre identité (vraiment pour qui il a été accordé)

Il est également préférable de passer le jeton Auth comme en-tête, comme:

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

Je ne sais pas si cela est essentiel, mais votre message d'erreur semble indiquer une erreur d'authentification dans l'en-tête de sorte que vous pouvez fournir un en-tête d'autorisation qui ne correspond pas à celui que vous avez besoin.

Voici une solution en utilisant PECL oauth extension. Le signera la demande de la façon dont vous l'avez défini. Dans ce cas, dans un fichier de configuration objet JSON qui a été importé dans le script.

        $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);

J'ai eu ce problème avant, mais avec twitter.

Pour OAuth fait nous communiquons avec le twitter deux fois, d'abord à jeton de demande d'acquisition, deuxième à autoriser l'envoi du premier jeton qui est déjà signé. Peut-être que vous surmontez que la 1ère.

Je reçois la même erreur 401 « Informations d'identification non valide » pendant quelques heures. Que j'ai remarqué que j'emmagasinés mon access_token dans la base de données dans un champ VARCHAR (50). Il couper une partie de la access_token. J'ai augmenté la longueur de la colonne. FIXE.

Vérifiez que la longueur du champ dans la base de données où vous stockez votre access_token et aussi votre refresh_token!

Je pense que l'API me est cassé. Le problème est parti lorsque je tente de demander une URI avec un ID utilisateur réel. Je veux dire comme ceci: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}

Supprimer votre token.json fichier, puis essayez à nouveau la demande.

Le problème pour moi était l'en-tête "autorisation" sur demande GET / POST:

documents Google dit: Autorisation: / * jeton OAuth 2.0 ici * /

Mais le bon est: Autorisation: OAuth / * jeton OAuth 2.0 ici * /

Oui! inclure « SERMENT » avant votre clé jeton!

Si vous utilisez cURL (PHP), utilisez:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top