0

我目前正在实现 Javascript Facebook 登录 API。

根据来自 Facebook 的回调响应,此客户端脚本然后将带有查询字符串参数的请求发送到我们网站上的 URL。根据该 URL 中的电子邮件,对客户端进行身份验证。

这是不安全的。Facebook(据我所知)没有返回我们可以验证的其他令牌,并且我们希望根据查询字符串参数中的电子邮件登录用户,并且没有密码。

我想添加另一个查询字符串参数,让我们确信查询字符串数据来自 Facebook 响应后的 JavaScript 重定向。

我认为这应该是由客户端脚本创建的某种散列值,我可以与服务器端进行比较。但是,通过客户端 cookie 或检查客户端脚本,攻击者可以使用用于创建此密钥的每个资源。

我可以使用一种通用且安全的方法来解决此问题吗?

4

3 回答 3

1

Facebook 显然使用OAuth。在不涉及太多细节(您可以在相关的 OAuth 和 FB 文档中找到)的情况下,OAuth 使用在您的服务器和服务提供商(在本例中为 Facebook)之间共享的秘密进行操作,该秘密永远不会向前端 Javascript 透露,并且用于确认您收到的回电是否真实。

于 2012-06-19T12:47:01.543 回答
0

每次对用户进行身份验证时,都向 Facebook 传递一个唯一的回调 URL。

此 URL 应包含一些安全令牌,如果存在,它将识别登录尝试的真实性。

于 2012-06-19T12:43:37.920 回答
0

您可以将state变量添加到您对 Facebook 的请求中。Facebook 将返回给您以验证您的请求。

https://developers.facebook.com/docs/reference/dialogs/oauth/

于 2012-06-19T12:46:19.870 回答