Facebook通过手动流程获取访问令牌

时间:2018-04-13 13:42:08

标签: facebook facebook-graph-api

我正在我们的reactjs + meteor app中实现facebook登录的手动流程。截至目前,我已经获得了FB在重定向网址中发送到我网站的代码。

使用此代码,我可以进行图形api调用,如here所示。然后我在facebook应用程序中将我的服务器IP列入白名单。即使这样也很好。我可以通过交换代码获得访问令牌。以下是适用于此处的代码:

const accessToken = await HTTP.get('https://graph.facebook.com/v2.10/oauth/access_token?client_id=<appID>&redirect_uri=mysite.com/facebook/redirect&client_secret=<appSecret>&code=<code>');

但是当我启用app secret proof时,我的图形调用返回oauth错误代码1,指定facebook无法验证app secret。我提到这个document来检查如何创建&amp;通过应用程序秘密证明。我尝试通过传递代码和放大器生成应用程序证明应用秘密,一次一个。以下是我尝试获取访问令牌的方法:

const appSecProof = cryto.createHmac('sha256', <appSecret>).update(<code>).digest('hex');
//<appSecret> is the appSecret from FB App, <code> is the code I get from FB after FB redirects to my site.

const accessToken = await HTTP.get('https://graph.facebook.com/v2.10/oauth/access_token?client_id=<appID>&redirect_uri=mysite.com/facebook/redirect&client_secret=<appSecret>&code=<code>&appsecret_proof=<appSecProof>');

我正在为app app secret配置应用程序?

我得到的另一个想法是,如果我正在进行手动服务器端实现,那么单独使用IP白名单可以处理安全问题。我不需要启用app secret proof。

我的最终目标是实现安全的Facebook登录。我曾尝试使用facebook javascript SDK,效果很好。但是在测试时我发现它在浏览器网络面板的xhr调用中显示了访问令牌。使用此访问令牌,我可以使用邮递员对FB API进行GET调用。所以想要从服务器端进行所有通信。

感谢。

0 个答案:

没有答案