我可以通过Facebook签名请求安全地验证Facebook用户吗?

时间:2014-06-11 10:17:06

标签: facebook authentication twitter oauth

我想让我的用户将他们的用户帐户与Facebook或Twitter相关联,并允许他们使用他们的Facebook / Twitter帐户登录我的服务器,而不是使用经典的用户名/密码。与StackOverflow中的登录基本相同。

我目前的Facebook方法: 客户端应用程序将执行OAuth,然后使用他们的Facebook ID登录我的服务器。根据此Facebook ID,服务器将查找关联的用户帐户并执行登录而不要求用户名/密码。然而,仅依靠Facebook ID登录并不是非常安全,因为这与仅使用用户名登录而不是用户名&密码。

因此,为了确保Facebook ID是真实的,客户端应用程序还将提供带有登录请求的FBSR(Facebook签名请求,请参阅:https://developers.facebook.com/docs/facebook-login/using-login-with-games/#checklogin)。 服务器将使用此FBSR检查两件事:

  1. 请求中的Facebook ID必须与隐藏在FBSR中的Facebook ID相同

  2. 服务器将通过Facebook密钥重新计算签名部分。这必须与FBSR中的签名匹配。

  3. 通常,服务器应使用oauth_token对Facebook服务器进行检查,以确保用户身份100%。但是我需要跳过这个以避免依赖我们服务器上的Facebook服务器。

    我有两个问题:

    1)上述方法是否足够好?可以改进(没有服务器到服务器的通信)吗?

    2)我想对Twitter帐户做同样的事情,但他们签署的请求与Facebook不同。似乎Twitter用户ID嵌入在oauth_token中,所以我的方法可能会稍微调整一下,但我不确定用户ID是否始终是oauth_token的一部分,并且无法在搜索互联网后得到确认。

1 个答案:

答案 0 :(得分:1)

我认为您的方法已经足够好了,并且没有任何方法可以避免与签名请求进行服务器到服务器的通信。请记住,使用Facebook Graph Api Version 2,为了保护用户的隐私,Facebook将发送不是真实的用户ID,而是为应用程序生成的用户ID。也可以启用匿名登录。

我不确定您尝试使用Twitter做什么,以及为什么要比较API(它们非常不同)。 Twitter login,也称为使用Twitter登录,用于任何网站或移动应用程序,也应该适合您。