我正在编写一个 Facebook 应用程序,其中列出了用户的朋友,并与用户提供的有关他们的信息(存储在 Google App Engine 数据库中)进行交叉引用。我的应用程序的运行方式如下:
用户登录 Facebook 后,通过 Facebook 的 Javascript SDK 进行 Graph API 调用,以获取其好友列表。同时,AJAX 请求会与用户的 Facebook ID 一起发送到我的 Google App Engine 请求处理程序,处理程序会发回一个 JSON 对象,其中包含来自数据库的有关用户朋友的信息。然后在用户计算机上交叉引用这两个列表。
这种方法中明显的安全缺陷是,任何人都可以使用任意人的 Facebook ID 向我的处理程序发送请求,而无需以该人的身份登录 Facebook,并获取该人提供的有关其朋友的所有信息。毕竟,Facebook ID 是公开的。
我能想到的确保服务器端用户身份的唯一方法,除了实现我自己的登录系统之外,就是在 AJAX 请求中包含用户的访问令牌,因为访问令牌是用户登录 Facebook 的证明。然后,请求处理程序可以向 Facebook Graph API 发出虚拟请求以验证其是否有效。但是,这似乎很棘手,而且我不确定如何处理访问令牌在传输到 App Engine 服务器时过期的可能性。我也调查过脸书Python SDK https://github.com/pythonforfacebook/facebook-sdk,尽管我不确定这有什么帮助。
App Engine 服务器如何验证 Facebook 用户是否登录到我的 Facebook 应用程序?
尝试使用签名请求而不是发送普通的 facebookID - 那么您可以使用 Facebook APP 页面上给出的 Secret_id 在服务器上对其进行解码。那么没有人能够向您发送“假”查询,因为它们将无法在服务器端解密。
例如,我有一个允许用户对给定条目进行投票的应用程序。用户接受权限后,我使用 JavaScript 将他的投票发送到服务器:
$.ajax({
type: "POST",
url: base_url + 'vote/send',
data: { signed_request: response.authResponse.signedRequest, vote:vote },
});
在服务器端,我正在解码signed_request以获取用户FacebookID并将其存储为合法投票...这样,没有人能够向我发送假投票,因为signed_request以这种方式加密,只有我的应用程序是这样的能够解码它。
响应当然是对象,它来自用户批准使用应用程序的权限后的SDK。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)