2017-03-31 72 views
2

今天,Facebook oauth登录到我的网站中断了。我启动了调试器,发现解析访问令牌失败。这似乎是因为Facebook更改了oauth响应的格式。它曾经是CGI参数:Facebook登录破解,oauth响应序列化从CGI参数更改为JSON

access_token=EAAFO...cBUZD&token_type=bearer&expires_in=5183996 

但这一切似乎一下子被过来的JSON:

{"access_token":"EAAFO...cBUZD","token_type":"bearer","expires_in":5183996} 

在我的代码的修复看起来很简单。我只需要将解析器从CGI解析器更改为JSON解析器,并获取我感兴趣的相同变量:access_token

我的问题是关于这个版本。当我的网站中断时,我不喜欢它。

为什么Facebook改变这个?这种变化是否记录在案Oauth是否有某种版本,我应该用它来防止这种破坏?我如何得知Facebook未来对Oauth所做的更改?

Facebook API upgrade tool没有列出我需要对我的应用程序的最新版本的API的任何更改。在任何情况下,都不是我使用的Oauth的网址似乎有一个版本号嵌入其中:

  • https://www.facebook.com/dialog/oauth
  • https://graph.facebook.com/oauth/access_token
+1

它在HTTPS宣布: //developers.facebook.com/docs/apps/changelog 2年前标题为“[Oauth Access Token]格式”。升级工具显示Facebook知道您需要更改的事情。 Facebook不可能知道你是否只处理旧格式或新老版本。 – WizKid

+1

_“无论如何,我用于Oauth的URL都没有嵌入其中的版本号”_--这是因为您没有指定一个,所以它会回落到最低的当前API版本应用可以使用。 HTTPS://developers.facebook。com/docs/facebook-login/manually-build-a-login-flow显示为这两个端点显式传递的API版本。 – CBroe

回答

1

由于WizKid状态,它在宣布Facebook Developers Changelog两年前标题为“[Oauth Access Token]格式”。由于API的变化,Facebook确实有一个工具来尝试找到会中断的事情,但它没有提醒这一点。

您可以将API版本号放入Facebook的Oauth URL中。随着版本号,对于Facebook登录的流程是:

  1. 带着一帮需要的参数将用户重定向到https://www.facebook.com/v2.9/dialog/oauth如您的客户端ID,您请求的权限列表,以及返回URL。
  2. 的Facebook让用户登录,要求他们接受你所要求的权限,然后重定向他们回到你的网站有一个“代码”参数
  3. 服务器端与您联系https://graph.facebook.com/v2.9/oauth/access_token与代码(和一些其他的东西)作为参数。 Facebook的使用令牌
  4. 服务器端的响应与您联系https:///graph.facebook.com/v2.9/me与该令牌请求有关用户的信息

这是一个非常这里记录的过程:https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow