我在Facebook OAuth上遇到了很多麻烦

时间:2014-10-13 22:36:22

标签: facebook api oauth-2.0

我创建了一个类,该类生成一个用Facebook授权我的用户的URL。这里是: https://www.facebook.com/dialog/oauth?response_type=code&client_id=...&scope=email%2Cuser_about_me%2Cuser_friends%2Cuser_hometown%2Cuser_location%2Cuser_work_history%2Cuser_education_history%2Cpublish_actions&state=...&redirect_uri=http%3a%2f%2flocalhost%3a53016%2fsocial%2fcallback%3fvariables%3dY2FsbGJhY2tfdXJsOi9MYW5kaW5nO2ZhbGxiYWNrX3VybDovQ29uc3VsdGFudC9TaWduVXA7bWV0aG9kOjE7cHJvdmlkZXI6MQ%3d%3d

此URL工作正常并返回我的回调函数。我能够将base64字符串转换为我传递给我的URL的变量。我遇到的麻烦是Facebook没有认识到URL给我access_token。这是我发送给Facebook的access_token的返回URL。 https://graph.facebook.com/oauth/access_token?client_id=...&client_secret=...&code=...&redirect_uri=http%3a%2f%2flocalhost%3a53016%2fsocial%2fcallback%3fvariables%3dY2FsbGJhY2tfdXJsOi9MYW5kaW5nO2ZhbGxiYWNrX3VybDovQ29uc3VsdGFudC9TaWduVXA7bWV0aG9kOjE7cHJvdmlkZXI6MQ%3d%3d

(出于显而易见的原因,我已经清除了client_id和client_secret。)

有谁能注意到我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

佩里,谢谢你的帮助。我能够弄清楚我的项目出了什么问题。当我将参数编码为Base64时,我没有使用正确的方法将其转换为String。 stackoverflow上的这个答案帮助我弄清楚我做错了什么。

C# Method like Base64String, but only alphanumeric (no plus or slash)

答案尤其来自Mason G. Zhwiti。我只是在做Convert.Base64String而不是HttpServerUtility.UrlTokenEncode(byte [] b)。在我这样做之后,我得到了我的回复。我好像我的URL最后有两个相同的符号。那就是放弃了Facebook的URL验证。一旦我采用了适当的方法,它就开始工作了。

我希望这可以帮助那些正在努力解决这类问题的人。

答案 1 :(得分:0)

具体的错误信息是什么 - 是未经授权的redirect_uri?

我对变量一无所知 - 他们有什么用?

您似乎不应该对查询字符串URL进行回调,但也许没关系。当我第一次实施OAuth2时,我发起了API调用,并回调了每个提供商的特定网址,例如mysite.com/login-google.php或mysite.com/login-facebook.php,但现在我有回调指向主站点URL(mysite.com)。由于我们在主站点URL上有index.php,我们可以拦截index.php中的回调并将它们路由到所需的提供程序脚本(login-google.php或login-facebook.php),该脚本清理回调URL并使对于最终用户来说,这是一个明智的选择。

您的回调网址:

http://localhost:53016/social/callback?variables=Y2FsbGJhY2tfdXJsOi9MYW5kaW5nO2ZhbGxiYWNrX3VybDovQ29uc3VsdGFudC9TaWduVXA7bWV0aG9kOjE7cHJvdmlkZXI6MQ==

您可以在浏览器中访问该回调网址吗?对其进行编码以抛出错误或输出调试消息,以便您知道回调URL正在运行。

我已在此代码中非常清楚地记录了Facebook的OAuth2流程:https://github.com/perrybutler/WP-OAuth/blob/master/login-facebook.php

希望这一切都有帮助...