我正在编写一个 Facebook 应用程序,列出用户的朋友,并与用户提供的有关他们的信息进行交叉引用(存储在 Google App Engine 数据库中)。我的应用程序操作如下:
用户登录 Facebook 后,通过 Facebook 的 Javascript SDK 进行 Graph API 调用以获取他们的朋友列表。同时,向我的 Google App Engine 请求处理程序发送 AJAX 请求,其中包含用户的 Facebook ID,处理程序会返回一个 JSON 对象,其中包含有关用户朋友的数据库信息。然后在用户的计算机上交叉引用这两个列表。
这种方法的明显安全漏洞是,任何人都可以向我的处理程序发送一个带有任意人的 Facebook ID 的请求,而不需要以该人的身份登录到 Facebook 并获取该人提供有关他们朋友的所有信息。毕竟,Facebook ID 是公开可用的。
我能想到的确保用户身份的方法,除了实现自己的登录系统外,就是在AJAX请求中包含用户的访问令牌,因为访问令牌是证明用户已经登录Facebook的凭证。然后,请求处理程序可以向Facebook Graph API发出虚拟请求以验证其有效性。但是,这似乎有些hacky,并且我不确定如何处理访问令牌在传输到App Engine服务器时过期的可能性。我也研究了 Facebook Python SDK,但我不确定它如何帮助解决问题。
App Engine服务器如何验证Facebook用户是否已登录我的Facebook应用程序?
用户登录 Facebook 后,通过 Facebook 的 Javascript SDK 进行 Graph API 调用以获取他们的朋友列表。同时,向我的 Google App Engine 请求处理程序发送 AJAX 请求,其中包含用户的 Facebook ID,处理程序会返回一个 JSON 对象,其中包含有关用户朋友的数据库信息。然后在用户的计算机上交叉引用这两个列表。
这种方法的明显安全漏洞是,任何人都可以向我的处理程序发送一个带有任意人的 Facebook ID 的请求,而不需要以该人的身份登录到 Facebook 并获取该人提供有关他们朋友的所有信息。毕竟,Facebook ID 是公开可用的。
我能想到的确保用户身份的方法,除了实现自己的登录系统外,就是在AJAX请求中包含用户的访问令牌,因为访问令牌是证明用户已经登录Facebook的凭证。然后,请求处理程序可以向Facebook Graph API发出虚拟请求以验证其有效性。但是,这似乎有些hacky,并且我不确定如何处理访问令牌在传输到App Engine服务器时过期的可能性。我也研究了 Facebook Python SDK,但我不确定它如何帮助解决问题。
App Engine服务器如何验证Facebook用户是否已登录我的Facebook应用程序?