web-dev-qa-db-fra.com

Problème d'URL de redirection Facebook OAuthException

Mon application fonctionnait bien depuis longtemps, mais maintenant, l'erreur Facebook me dit: 

Content: {"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}

https://www.facebook.com/dialog/oauth/?client_id=163840537126360&redirect_uri=http://mycloud.niranjan.com/facebook/callback//empty/?vTitle=Facebook&scope=email,sms,user_about_me,friends_about_me,user_activities,friends_activities,user_birthday,friends_birthday,user_education_history,friends_education_history,user_events,friends_events,user_likes,friends_likes,user_location,friends_location,user_photos,friends_photos,user_videos,friends_videos,user_relationships,friends_relationships,user_status,friends_status,user_checkins,friends_checkins,read_stream,publish_stream

Quelqu'un peut-il suggérer une solution pour celui-ci?

18
Niranjan Sagar

Je me rends compte qu'il y a 6 semaines de retard, mais je me suis dit que je posterais ça ici car j'ai trouvé un correctif qui fonctionnait pour nous. Avait le même problème et après avoir essayé de coder l'URL de retour (ce qui ne fonctionnait pas), j'ai réalisé que nous construisions notre URL de la manière suivante:

$url = "http://example.com/";
$redirect_script = "/cgi-bin/redirect.cgi";

$redirect_url = $url . $redirect_script;

Cependant, cela a abouti à une URL de retour ressemblant à http://example.com//cgi-bin/redirect.cgi - notez le "//" après example.com. Lorsque j'ai supprimé les doubles barres obliques de cette URL, cela a fonctionné à nouveau. OP, je vois que votre URL de redirection a la même chose dans /facebook/callback//empty?etc, ce qui, à mon avis, est ce qui le dérange.

16
mkania

Dans mon cas, j’utilisais http://127.0.0.1:8000 - Cependant, FB change automatiquement le http://127.0.0.1:8000/ dans la redirection OAuth afin de traiter les paramètres de requête qui passent. Changer mon URL dans mon code pour avoir une barre oblique de fin a résolu le problème pour moi. Je soupçonne qu'ils stockent la version finale utilisable et la comparent à la deuxième demande.

15
cyberwombat

Niranjan, nous avons vu le même message d'erreur, précisément. Comme vous, cela a commencé ce mois-ci, sans aucune modification de notre code.

Nous avons vérifié avec soin que le redirect_uri était en effet exactement le même dans les deux appels - d'abord l'appel autorisé et l'appel second_accès.

Nous avons classé avec Facebook, mais ils l'ont classé comme "Bas": https://developers.facebook.com/bugs/307245456075215?browse=search_51964e3320a5b5556208759

Dans notre cas, nous faisions quelque chose d'inhabituel (cela pourrait donc ne pas être pertinent pour votre cas). Notre redirect_uri était une URL avec une autre URL intégrée en tant qu'élément de chemin codé. L'URL dans une URL, doublement codée lorsqu'elle était transmise au FB, avait commencé à causer des problèmes avec les serveurs d'API Facebook.

Nous avons résolu ce problème en modifiant le codage de l'URL imbriquée en un nombre hexadécimal long plutôt qu'en%, de sorte que tous les serveurs de Facebook voient une simple redirect_uri contenant un certain nombre d'hex dans le chemin, non affectés par le codage/décodage normal des URL.

Je soupçonne Facebook d'avoir changé la façon dont ils encodaient/décodaient leurs paramètres d'URL, peut-être deux fois. 

Si vous faites quelque chose comme nous, essayez cette approche. Sinon, essayez une redirect_uri totalement différente et plus simple, pour voir si vous pouvez obtenir quelque chose à travailler. Et assurez-vous de coder/décoder correctement tous les paramètres de requête d'URL.

12
Steve S

Si le même problème se posait aujourd’hui, le problème était que redirect_uri utilisait un schéma http: // URL, et Facebook n’acceptait que https: //

4
Michael Borgwardt

Il est important de noter que si vous utilisez https://, cependant, dans votre URL de connexion, vous utilisez http://, une variable OAuthException apparaît alors à propos d'un problème d'URL.

Donc, vous devez utiliser https:// dans votre URL de connexion si vous l'utilisez. 

Cela a résolu mon problème.

1
Jack Trowbridge

J'ai eu un comportement étrange sur Facebook.

Mon site utilise https et j'ai toujours le même message d'erreur "Erreur lors de la validation du code de vérification. Assurez-vous que votre redirect_uri est identique".

Mais alors j'ai changé https en http dans redirect_uri et dans le panneau du développeur (urls OAuth) puis l'erreur disparaît et l'authentification commence à fonctionner correctement. Mais le site fonctionne toujours https ...

J'espère que ça aide quelqu'un.

1
Gregory Rusakov

dans mon cas, cela était causé par des caractères spéciaux dans ma chaîne de requête, j'avais un code base64 contenant / et =, j'ai essayé quelques caractères comme ! @ = / ; tous jettent la même erreur

-_#$ est valide.

P.S / à la fin de la requête n'a pas aidé. aussi il était interdit au milieu de la chaîne de requête

1
Mo Hrad A

Mo Hrad A a raison, je n'ai même pas réussi à utiliser le caractère $.

J'ai écrit 2 fonctions simples qui me permettent d'utiliser des URL de retour complexes avec des paramètres:

public static string EncodeFacebookReturnUrl(string url)
{
    return Regex.Replace(HttpUtility.UrlEncode(url), "%", "_-_");
}

public static string DecodeFacebookReturnUrl(string url)
{
    return HttpUtility.UrlDecode(Regex.Replace(url, "_-_", "%"));
}

Traduire avec UrlEncode donne seulement 1 caractère "illégal" (%), que je remplace par la chaîne légale _-_. Simplifie également le décodage.

0
RoyBS