facebook - 我可以仅使用 Facebook 签名请求安全地验证 Facebook 用户吗?

标签 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 必须与 Conceal 在 FBSR 中的 Facebook id 相同

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

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

我有两个问题:

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

2) 我想对 Twitter 帐户执行相同的操作,但他们的签名请求与 Facebook 不同。 Twitter 用户 ID 似乎嵌入在 oauth_token 中,所以我的方法可能需要稍微调整一下,但我不确定用户 ID 是否始终是 oauth_token 的一部分,并且在搜索互联网后无法确认这一点。

最佳答案

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

我不确定你想用 Twitter 做什么,也不知道你为什么要比较这些 API(它们完全不同)。 Twitter login ,也称为使用 Twitter 登录,用于任何网站或移动应用程序,应该也适用于您。

关于facebook - 我可以仅使用 Facebook 签名请求安全地验证 Facebook 用户吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24160384/

相关文章:

facebook - 将 Facebook、Twitter、FriendFeed、Picasa 和其他社交媒体或网络站点集成到网站中

java - 捕获异常 : java. lang.SecurityException : Permission denied (missing INTERNET permission? )

javascript - 在 Twitter 上获取/用户/显示/返回错误 :400 and Error:404 (AJAX)

java - Android上如何使用Jsoup库登录网站

facebook - 每个提供商的 firebase 用户 ID 是唯一的(facebook、twitter、密码)

javascript - 问题 "smartening"和链接解析相同的文本

facebook - 网页中的 Flutter Facebook 登录

iphone - Facebook-ios-sdk 对话框立即消失

c# - 最佳实践返回值与异常与枚举

php - 自动聚焦于输入表单