44 votes

Impossible d'obtenir le jeton d'accès de Facebook. J'ai une OAuthException qui dit "Erreur de validation du code de vérification".

J'utilise java et le but de mon application de démonstration est simple : Mettre à jour le statut de l'utilisateur. J'ai suivi la Flux côté serveur à la page http://developers.facebook.com/docs/authentication . J'ai obtenu la boîte de dialogue d'authentification, facebook m'a conduit à l'url de rappel et j'ai obtenu le message suivant code dans ma page de rappel. Ensuite, j'ai échoué lorsque j'ai essayé de générer un jeton d'accès.

Dans la page du guide, il est indiqué que l'url suivante peut être utilisée pour générer un jeton d'accès :

https://graph.facebook.com/oauth/access_token?
     client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&
     client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE

Mais ce qui se passe dans mon environnement est que j'ai le message d'erreur suivant :

{
   "error": {
      "type": "OAuthException",
      "message": "Error validating verification code."
   }
}

Je suis certain que tous les paramètres sont corrects car si je modifie la valeur client_id ou le paramètre client_secret, j'obtiendrai un message d'erreur différent. Le paramètre code est ce que j'ai obtenu du callback facebook. Cela devrait donc être correct, non ? Je n'arrive vraiment pas à comprendre quel est le problème....

Une idée à ce sujet ? Je suis coincé ici...

65voto

Chip Points 564

J'ai récemment rencontré exactement ce problème : tout correspondait, mais l'échec était dû à une OAuthException. Pour que cela fonctionne, il a fallu changer l'uri de redirection (dans les deux requêtes pour le flux) de :

http://foo.example.com

à

http://foo.example.com/

C'est-à-dire, ajouter la barre oblique de fin. Et puis ça a marché. C'est stupide et idiot, mais c'est comme ça.

6voto

Vinayak Suley Points 314

J'ai eu le même problème et j'ai essayé les suggestions ci-dessus. Elles m'ont aidé, mais dans mon cas, le problème était que mon URL de redirection comportait un paramètre de requête et que Facebook ne l'acceptait pas. La morale de l'histoire est donc que l'url de redirection que vous envoyez pour échanger le jeton doit être identique à l'url de redirection d'origine et ne doit pas contenir de paramètres de requête.

3voto

Brad Points 61171

J'ai eu le même problème. Il s'agissait d'une différence d'URL, mais contrairement aux autres qui ont posté, la mienne était la différence entre HTTP et HTTPS.

Nous avons BigIP qui gère les demandes HTTPS et les transmet à un serveur Apache HTTP. Lorsque la fonction getCurrentUrl() de BaseFacebook était appelée, elle détectait HTTP, et non le HTTPS original. J'ai modifié cette fonction comme suit :

protected function getCurrentUrl() {
    if ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)) ||
        (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || 
        (isset($_SERVER['HTTP_PSEUDOSSL']) && $_SERVER['HTTP_PSEUDOSSL'] == 'true')) {
      $protocol = 'https://';
    }
    else {
      $protocol = 'http://';
    }
...

Cette version prend en charge le HTTP_PSEUDOSSL clé. J'espère que cela aidera quelqu'un.

3voto

Serexx Points 335

On s'est amusé avec ça aussi.

Dans notre cas, la barre oblique de fin d'URL était déjà présente, j'ai donc essayé le jeton que nous utilisions dans l'URL. Outil de débogage FB et il a été validé, donc il semblait que FB ne voyait même pas le Token dans la requête.

Après quelques recherches, j'ai trouvé l'origine du problème : nous effectuons un GET avec des en-têtes HTTP et non avec une chaîne de requête, de sorte que FB ne voit pas du tout le jeton.

La morale semble être que si vous pouvez faire valider le Token dans l'outil de débogage FB, il y a probablement quelque chose qui cloche dans votre demande.

Il peut s'agir d'un "/" manquant ou d'une autre erreur avec l'URL définie de l'application (une erreur de domaine est une erreur différente). Je n'ai pas essayé de définir l'URL de l'application/du site web pour HTTPS et de faire la demande avec HTTP mais je pense que cela pourrait aussi causer un problème.

Ou, comme dans notre cas, la méthode de demande est peut-être incorrecte - GET avec des en-têtes ou POSTing jettent tous deux le 2500, vous devez faire GET avec une chaîne de recherche.

J'espère que cela vous aidera !

2voto

matt Points 21

Oui, la barre oblique de fin a fonctionné pour moi aussi, merci !

Pour le débogage, j'ai trouvé utile d'utiliser exactement le code que fb fournit sur la page du développeur :

http://developers.facebook.com/docs/authentication/

Une fois que cela fonctionne, vous pouvez le modifier pour l'adapter à votre propre code.

Je ne suis pas sûr, mais vous pouvez également vérifier que vos paramètres "Site URL" et "Site Domain" sont corrects sur l'écran App Edit, car selon la documentation, le redirect_uri doit être dans le même domaine. (Ceci est différent des urls des pages canvas/tab).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X