17

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

是否安全并推荐使用 JS SDK 进行身份验证?JS SDK 的身份验证流程是如何发生的?

谢谢, 维内特

4

3 回答 3

3

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

新版 JS SDK 使用 OAuth 2.0。这是有据可查的 - 查看OAuth 2.0 站点了解详细信息。

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

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

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

于 2011-08-08T12:59:31.540 回答
1

这不安全,这就是为什么您在高级注册文档 中有“验证字段”和“验证签名”段落的原因:

当您请求 Facebook 数据时,我们会在将表单字段打包到 signed_request. 这使您可以假设所有数据都是真实的,从而使您不必进行验证。可能出现的一个问题是,聪明的攻击者可以更改表单字段并将其提交给您,从而为您提供未经验证的数据。

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

于 2011-02-17T20:11:03.173 回答
1

另一个需要注意的问题是不要将您从客户端获得的 FB 用户对象用于服务器端的任何内容。这是因为有人很容易编写一个脚本,而不是调用 fb.api '/me' 会向您的应用程序发送一个带有另一个用户 ID 的“假” JSON 用户对象。如果您正在对用户进行任何类型的服务器端处理,那么我认为您确实需要进行某种服务器端身份验证。

于 2011-02-17T14:12:12.157 回答