Facebook重定向网址问题OAuthException

时间:2013-05-15 10:26:15

标签: facebook api facebook-graph-api oauth

我的应用程序运行良好很长时间,但现在我收到来自Facebook的错误说:

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

有人可以建议这个解决方案吗?

8 个答案:

答案 0 :(得分:16)

我意识到这已经晚了6个星期,但我想我会发布这个,因为我发现了一个对我们有用的修复。有同样的问题,并在尝试编码返回网址(这不起作用)后,我意识到我们正在建立我们的网址:

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

$redirect_url = $url . $redirect_script;

然而,这导致返回网址看起来像http://example.com//cgi-bin/redirect.cgi - 请注意example.com之后的“//”。当我从此URL中删除双斜杠时,它再次起作用。 OP,我发现您的重定向网址在/facebook/callback//empty?etc中具有相同的内容,我认为这会弄乱它。

答案 1 :(得分:15)

在我的情况下,我使用的是http://127.0.0.1:8000 - 但是FB会自动更改为OAuth重定向中的http://127.0.0.1:8000/以处理传递的查询参数。在我的代码中更改我的URL以使用结束斜杠解决了我的问题。我怀疑他们正在存储最终可用版本并将其与第二个请求进行比较。

答案 2 :(得分:12)

Niranjan,我们正好看到了同样的错误信息。和你一样,它本月开始发生,我们的代码没有任何变化。

我们仔细验证了redirect_uri在两个调用中确实完全相同 - 首先是授权调用,第二个是access_token调用。

我们向Facebook提交了申请,但他们将其分类为“低”: https://developers.facebook.com/bugs/307245456075215?browse=search_51964e3320a5b5556208759

在我们的案例中,我们做了一些不寻常的事情(所以这可能与你的情况无关)。我们的redirect_uri是一个URL,其中另一个URL作为编码路径元素嵌入。传递给FB时,URL内的URL被双重编码,已经开始导致Facebook API服务器出现问题。

我们通过将嵌套URL的编码更改为长十六进制数而不是%编码来解决此问题,因此所有Facebook服务器都看到一个简单的redirect_uri,其中包含路径中的一些十六进制,不受普通URL编码/解码的影响。

我怀疑Facebook改变了他们对URL参数进行编码/解码的方式,可能会解码两次。

如果您正在做类似我们的事情,请尝试这种方法。如果没有,尝试一个完全不同和更简单的redirect_uri,看看你是否可以得到一些工作。并确保您正确编码/解码所有URL查询参数。

答案 3 :(得分:4)

今天遇到同样的问题,问题结果是redirect_uri使用了http:// URL Schema,Facebook只接受https://

答案 4 :(得分:1)

请务必注意,如果您在登录网址中使用https://但使用的是http://,那么它会针对网址问题抛出OAuthException

因此,如果您使用登录网址,则必须使用https://

这解决了我的问题。

答案 5 :(得分:1)

我遇到了一些奇怪的Facebook行为。

我的网站运行https,我总是收到错误"验证验证码时出错。请确保您的redirect_uri相同"。

但是我在redirect_uri和开发人员面板(OAuth网址)中将https更改为http,然后错误消失并且验证开始正常工作。但网站仍然运行https ...

希望这有助于某人。

答案 6 :(得分:1)

在我的情况下,它是由我的查询字符串中的特殊字符引起的,我有包含/=的base64代码,我尝试过像! @ = / ;这样的字符 所有抛出相同的错误

只有两个看似有效的字符是- _ # $

<强> P.S 查询结尾的/没有帮助。它也被禁止在查询字符串

的中间

答案 7 :(得分:0)

Mo Hrad A 是对的,我甚至没有设法使用$ character。

我编写了两个简单的函数,允许我使用带参数的复杂返回URL:

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

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

使用UrlEncode进行翻译只会导致1&#34;非法&#34;字符(%),我用合法字符串_-_替换。 使解码变得简单。