2012-05-31 161 views
1

我正在尝试构建一个Facebook应用程序,以便不必构建自己的Facebook身份验证。所以在Facebook认证他们并提供给我他们的user_id后,我可以简单地将其存储在他们的数据库中。使用signed_request进行facebook身份验证

显然,我想保护我的用户免受纯粹使用他们的user_id欺骗。以下是我想出了:

  1. 不是传递的USER_ID来回浏览器和我的服务器之间的,我会通过signed_request,因为这不能不知道我app_secret
  2. 为了保护这从被欺骗被嗅探和重新使用,我会将我的请求封装在SSL(HTTPS)中
  3. 为了防止使用过时的signed_requests,我将确保issued_at是相对最新的。

这是sign_request的意义的一部分,还是有更正确的方式来使用Facebook身份验证?

我的方法有什么明显的问题?

谢谢!

+0

在客户端/服务器之间交换数据会更简单,只需让客户端自己进行身份验证,然后服务器就自己进行身份验证,这样每一方都拥有自己的令牌并获取查询需要的信息。 –

+0

嗯,我一直在关注[this](https://developers.facebook.com/docs/guides/web/#login)方法,因为它似乎使用JavaScript SDK是执行Facebook身份验证的最简单方法。 如果客户端执行身份验证,我仍然需要一些传递给服务器的验证身份,我想知道signed_request是否适合这个。 你是否建议完全使用[服务器端身份验证](https://developers.facebook.com/docs/authentication/server-side/)或者有什么我在这里丢失? – integsrtite

+0

是的,我建议使用服务器端身份验证,它真的不复杂,并且,我认为,您可以在**之前拥有经过身份验证的用户**,甚至可以将html输出发送回给他,从而使您可以更好地控制事物。看看[如何安全地将Facebook ID从客户端传递到服务器](http://stackoverflow.com/questions/10738068/how-to-pass-facebook-id-from-client-to-server-securely)。 –

回答

0

这是验证用户的合理方式。我想你已经涵盖了绕过认证系统的所有可能的方式,所以你不应该有问题。

如果您试图进行API调用,您还应该使用FB.getLoginStatus()函数为已登录到应用程序的用户个性化体验。