我正在编写一个Facebook应用程序,其中列出了用户的朋友,并与用户提供的关于他们的信息进行了交叉引用(该信息存储在Google数据库中)。下面是我的应用程序的运行方式:
当用户登录到Facebook后,通过Facebook的Javascript进行图形API调用,以获得他们朋友的列表。同时,使用用户的Facebook ID向我的Google请求处理程序发送一个AJAX请求,处理程序返回一个JSON对象,其中包含来自数据库的有关用户朋友的信息。然后在用户的计算机上交叉引用这两个列表。
这种方法的一个明显的安全缺陷是,任何人都可以向我的处理程序发送带有任意个人Facebook ID的请求,而无需以该人的身份登录Facebook,并获取该人提供的有关其朋友的所有信息。毕竟,Facebook的ID是公开的。
唯一能确保用户身份服务器端(没有实现我自己的登录系统)的方法是在AJAX请求中包含用户的访问令牌,因为访问令牌是用户登录到Facebook的证明。然后,请求处理程序可以向发出一个虚拟请求,以验证它是否有效。然而,这似乎很麻烦,我不知道如何处理访问令牌在传输到App服务器时过期的可能性。我也研究过Facebook Python SDK,虽然我不知道这会有什么帮助。
应用程序引擎服务器如何验证Facebook用户是否登录到我的Facebook应用程序?
发布于 2013-07-07 23:10:01
尝试使用signed_request,而不是发送普通的facebookID--然后您可以在服务器上使用Facebook应用程序页面上的secret_id来解码它们。那么,没有人能够向您发送“假”查询,因为它们将无法在服务器端解密。
例如,我有允许用户对给定条目进行投票的应用程序。在用户接受权限之后,我将使用JavaScript向服务器发送他的选票:
$.ajax({
type: "POST",
url: base_url + 'vote/send',
data: { signed_request: response.authResponse.signedRequest, vote:vote },
});
在服务器端,我正在解码signed_request以获得用户FacebookID并将其存储为合法投票.通过这种方式,没有人能给我发送假选票,因为signed_request被阻碍,只有我的应用程序才能破解它。
当然,响应是对象,在用户获得使用app的许可后,它来自SDK。
https://stackoverflow.com/questions/17518905
复制相似问题