avec des informations d'identification non valides agaçants OAuth 2.0 google + api
-
22-10-2019 - |
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:
- Accéder à un utilisateur d'autoriser la demande.
- Obtient le code de requête de Google.
- Utilise
cUrl
pour demander l'accès jeton avec le code de requête de Google. - Fait passer le code d'accès à une session php.
- Retour à la redirection page d'accueil.
- Page principale détecte variable de session est définie et ne présente pas le lien de connexion.
- Php sur la page principale des utilisations
readFile
pour obtenir la réponse JSON de Google. - Google renvoie les informations d'identification non valides.
ici est un exemple uri généré par php qui est inséré dans readFile:
Aide s'il vous plaît?
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.
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'));