Facebook JS SDK不需要app secret来进行身份验证:它有多安全?

时间:2011-02-17 11:40:51

标签: javascript facebook facebook-graph-api facebook-javascript-sdk

当我使用Facebook的JS SDK来验证我的应用程序(使用FB.init方法)时,我需要的只是我的App ID。它不需要我的应用程序密钥和/或应用程序密钥。 但是,当我使用PHP SDK时,它需要我的应用程序秘密(至少我以前学习的例子使用了app ID和app secret)。

是否安全并建议使用JS SDK进行身份验证? JS SDK的身份验证流程是如何实现的?

谢谢, Vineet

3 个答案:

答案 0 :(得分:3)

我正在研究身份验证的安全性 - 我认为自从你问这个问题以来情况发生了变化,所以当你提问时,这些信息可能不正确。

新版本的JS SDK使用OAuth 2.0。这有详细记录 - 有关详细信息,请查看OAuth 2.0 site

关于SDK是否需要app秘密的问题 - 我对此有一点困惑。在应用程序服务器端,库指示JS SDK使用app secret签署cookie(请参阅facebook-python sdk中的函数get_user_from_cookie) - 但是,我完全不清楚JS SDK如何知道应用程序机密。我猜它可以在FB中直接在验证过程中与FB动态地从FB中动态获取它,但我不确定。

(编辑:我认为JS SDK直接从FB获取使用app secret签名的cookie - JS SDK永远不知道应用秘密)。

没有完全回答你的问题,但可能会更多地了解它是如何运作的。

答案 1 :(得分:1)

另一个要警惕的问题是不要使用从客户端获取的FB用户对象来处理服务器端的任何内容。这是因为有人制作一个脚本而不是调用fb.api'/ me'会很容易向你的应用发送一个带有其他用户ID的“假”JSON用户对象。如果您正在对用户进行任何类型的服务器端处理,那么您确实需要进行某种服务器端身份验证。

答案 2 :(得分:1)

安全,这就是{{em>验证字段“和”不验证签名“段落{{{ 3}}文件:

  

当您请求Facebook数据时,我们   之前验证表单字段   把它们包装起来   signed_request。这让你假设   所有数据都是真实的并保存   你必须验证的东西。该   可能出现的一个问题是   聪明的攻击者可以改变形式   字段并将其提交给您,从而   给你未经验证的数据。

阅读该文档以获取更多信息,我还写了一篇Advanced Registration(关于该插件的介绍),并展示了如何处理来自客户端的fields属性。