Facebook登录破解,oauth响应序列化从CGI参数更改为JSON
问题描述:
今天,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
答
由于WizKid状态,它在宣布Facebook Developers Changelog两年前标题为“[Oauth Access Token]格式”。由于API的变化,Facebook确实有一个工具来尝试找到会中断的事情,但它没有提醒这一点。
您可以将API版本号放入Facebook的Oauth URL中。随着版本号,对于Facebook登录的流程是:
- 带着一帮需要的参数将用户重定向到
https://www.facebook.com/v2.9/dialog/oauth
如您的客户端ID,您请求的权限列表,以及返回URL。 - 的Facebook让用户登录,要求他们接受你所要求的权限,然后重定向他们回到你的网站有一个“代码”参数
- 服务器端与您联系
https://graph.facebook.com/v2.9/oauth/access_token
与代码(和一些其他的东西)作为参数。 Facebook的使用令牌 - 服务器端的响应与您联系
https:///graph.facebook.com/v2.9/me
与该令牌请求有关用户的信息
这是一个非常这里记录的过程:https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow
它在HTTPS宣布: //developers.facebook.com/docs/apps/changelog 2年前标题为“[Oauth Access Token]格式”。升级工具显示Facebook知道您需要更改的事情。 Facebook不可能知道你是否只处理旧格式或新老版本。 – WizKid
_“无论如何,我用于Oauth的URL都没有嵌入其中的版本号”_--这是因为您没有指定一个,所以它会回落到最低的当前API版本应用可以使用。 HTTPS://developers.facebook。com/docs/facebook-login/manually-build-a-login-flow显示为这两个端点显式传递的API版本。 – CBroe