我正在编写一个列出用户朋友的 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 服务器时过期的可能性。我还研究了Facebook Python SDK,但我不确定这可能有什么帮助。
App Engine 服务器如何验证 Facebook 用户是否已登录到我的 Facebook 应用程序?