当我使用Facebook的JS SDK来验证我的应用程序(使用FB.init方法)时,我需要的只是我的App ID。它不需要我的应用程序密钥和/或应用程序密钥。 但是,当我使用PHP SDK时,它需要我的应用程序秘密(至少我以前学习的例子使用了app ID和app secret)。
是否安全并建议使用JS SDK进行身份验证? JS SDK的身份验证流程是如何实现的?
谢谢, Vineet
答案 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
属性。