【问题标题】:I'm having a lot of trouble with Facebook OAuth我在使用 Facebook OAuth 时遇到了很多问题
【发布时间】:2014-12-08 14:35:57
【问题描述】:

我创建了一个类,该类生成一个 URL,该 URL 授权我的用户使用 Facebook。这里是: 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 无法识别给我 access_token 的 URL。这是我发送给 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。)

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

【问题讨论】:

    标签: facebook api oauth-2.0


    【解决方案1】:

    佩里感谢您的帮助。我能够弄清楚我的项目存在什么问题。当我将参数编码为 Base64 时,我没有使用正确的方法将其转换为字符串。这个关于 stackoverflow 的答案帮助我弄清楚我做错了什么。

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

    特别是来自 Mason G. Zhwiti 的答案。我只是在做 Convert.Base64String 而不是 HttpServerUtility.UrlTokenEncode(byte[] b)。在我这样做之后,我能够得到我的回应。我似乎我的网址末尾有两个相等的符号。那是抛弃 Facebook 的 URL 验证。一旦我做了适当的方法,它就开始工作了。

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

    【讨论】:

      【解决方案2】:

      具体的错误信息是什么 - 是未经授权的 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 并使最终用户可以轻松使用它们。

      您的回调网址:

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

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

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

      希望对您有所帮助...

      【讨论】:

      • 感谢佩里的回复。我可以在浏览器中调用该 URL。当我从 Facebook 收到正确的代码并尝试交换 access_token 的代码时,这是我得到的错误消息:{“error”:{“message”:“验证验证码时出错。请确保您的 redirect_uri 相同您在 OAuth 对话请求中使用的那个","type":"OAuthException","code":100}} 非常感谢您提供任何帮助。
      • 我忘了说,在 Facebook 应用程序设置过程中,您还必须单击添加平台,然后提供您的站点 URL。见:facebook.com/help/community/question/?id=542958419109491
      • 请注意 Jim Hunter 在此问题中的评论,其中指出 Facebook 似乎需要在您的重定向 URL 中使用斜杠:stackoverflow.com/questions/13440076/…
      • 这也可能是相关的:stackoverflow.com/questions/3707738/…
      • 由于我无法将 cmets 添加到您的帖子中(缺乏代表),因此我在此回复。很好地解决了这个问题。我感觉这两个等号是坏消息,谢谢你的确认!我不得不说这是一个非常模糊的问题......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多