Javascript Facebook JS SDK不需要应用程序机密进行身份验证:它有多安全?

Javascript Facebook JS SDK不需要应用程序机密进行身份验证:它有多安全?,javascript,facebook,facebook-graph-api,facebook-javascript-sdk,Javascript,Facebook,Facebook Graph Api,Facebook Javascript Sdk,当我使用Facebook的JS SDK验证我的应用程序(使用FB.init方法)时,我只需要我的应用程序ID。它不需要我的应用程序机密和/或应用程序密钥。 然而,当我使用PHPSDK时,它需要我的应用程序机密(至少我以前学习的示例都使用了应用程序ID和应用程序机密) 使用JS SDK进行身份验证是否安全且值得推荐?JSSDK的身份验证流究竟是如何发生的 谢谢, Vinet另一个需要注意的问题是不要在服务器端使用从客户端获得的FB用户对象。这是因为,如果有人编写一个脚本,而不是调用fb.api“/

当我使用Facebook的JS SDK验证我的应用程序(使用FB.init方法)时,我只需要我的应用程序ID。它不需要我的应用程序机密和/或应用程序密钥。 然而,当我使用PHPSDK时,它需要我的应用程序机密(至少我以前学习的示例都使用了应用程序ID和应用程序机密)

使用JS SDK进行身份验证是否安全且值得推荐?JSSDK的身份验证流究竟是如何发生的

谢谢,
Vinet

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

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

当您请求facebook数据时,我们 在开始之前验证表单字段 把它们包装在盒子里
签名请求
。这让你可以假设 所有数据都是真实的并保存 你不必验证东西。这个 可能出现的一个问题是 聪明的攻击者可以更改表单 字段并将其提交给您,从而 给你未经验证的数据


阅读该文档了解更多信息,我还写了一篇(关于插件的介绍),并展示了如何处理来自客户端的
字段
属性

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

JSSDK的新版本使用OAuth 2.0。这是有据可查的-查看详细信息

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

(编辑:我认为JSSDK直接从FB获得应用程序机密签名的cookie-JSSDK永远不知道应用程序机密)


虽然没有完全回答你的问题,但可能会让你更清楚地了解它的工作原理。

在JS文件中使用你的应用程序机密将允许用户以纯文本形式查看,这将是你的应用程序的安全漏洞。FB SDK在过去几年有什么变化吗?PHP SDK需要应用程序id+访问令牌+密钥来请求用户数据。JSSDK只需要app id+访问令牌。FB怎么知道,JS请求实际上是从我的页面发出的,没有密钥?或者为什么PHP SDK的工作方式与JS SDK不同(因此没有密钥)?