提问者:小点点

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


我创建了一个类,生成一个URL,授权我的用户使用脸谱网。这里是:https://www.facebook.com/dialog/oauth?response_type=code

这个URL工作得很好,并返回到我的回调函数。我可以将base64字符串转换为我的变量,并与我的URL一起传递。我面临的问题是脸谱网无法识别给我access_token的URL。这是我发送给脸谱网access_token的返回URL。https://graph.facebook.com/oauth/access_token?client_id=...

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

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


共2个答案

匿名用户

Perry感谢您的帮助。我能够找出我的项目中的问题所在。当我将参数编码为Base64时,我没有使用正确的方法将其转换为String。这个关于stackoverflow的答案帮助我找出了我做错了什么。

C#方法类似于Base64String,但只有字母数字(没有加号或斜杠)

答案尤其来自梅森·G·朱维蒂。我只是在做转换. Base64String而不是HttpServerUtility.UrlTokenEncode(byte[]b)。之后,我能够得到我的回应。我似乎我的URL在最后有两个相等的符号。这让Facebook失去了URL验证。一旦我做了适当的方法,它就开始工作了。

我希望这能帮助任何正在与这种问题作斗争的人。

匿名用户

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

我有点忘记了变量——它们是干什么的?

看起来你不应该URL做查询字符串的回调,但也许没关系。当我第一次实现OAuth2时,我有API调用来自和回调到每个提供者的特定URL,例如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,使最终用户可以轻松使用它们。

您的回调URL:

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

您可以在浏览器中访问该回调URL吗?编写代码以抛出错误或输出调试消息,以便您知道回调URL正在工作。

我在这段代码中非常干净地记录了Facebook的OAuth2流程:https://github.com/perrybutler/WP-OAuth/blob/master/login-facebook.php

希望这一切都有帮助…