使用 Android 帐户管理器验证在我的服务器上使用 FB 登录的用户

Authenticate user logged in with FB at my server using the Android Account Manager

我对使用 Android 客户经理进行身份验证有疑问。我们有一个后端和一个 Android 应用程序,用户应该使用他的 Facebook 帐户登录我们的后端。目前,我们为此目的展示了一个 webview,它执行正常的 oAuth 2,但使用 Android 帐户管理器对用户来说更安全、更容易,因此我们想要切换。我的问题是,服务器如何验证用户是否真的是他假装的人。由于我们不能信任该应用程序,因此我们必须从服务器端与 fb 对话以验证用户是否真的是他假装的人。基于相当similar idea我做了下图来问你这是不是正确的方法或者我是否遗漏了什么:

流程如下所示:

  1. 用户想用他的 facebook 帐户登录
  2. Android 客户经理在他选择 Facebook 帐户的地方显示
  3. 用户授权 "My app" 允许访问他的 fb 数据
  4. Android 客户经理从 Facebook 服务器获取授权令牌
  5. "My App"现在有了授权令牌,可以访问用户的fb数据
  6. "My App" 将令牌传递给 "My Server"
  7. "My Server" 现在通过从 fb 服务器获取用户数据来检查令牌是否有效
  8. 如果令牌有效,"My Server" 会为 "My App" 的当前会话返回一个正常的临时有效 cookie。用户现在使用他的 fb 帐户登录我的服务器。

那么这是正确的方法吗?第 6 步将令牌一次传递给 "my server" 是个好主意还是有更好的方法?顺便说一句,Facebook 在这里只是一个例子,我们使用不同的身份验证提供商,如 FB、Google 和 Twitter,但每个提供商的流程应该相同。

我不知道这是否正确。但我想分享一下我们如何在我们的案例中解决这个问题,这与您的解决方案几乎相同。我们使用 GoogleFacebook 身份验证提供商。

我们的 android 应用程序将令牌发送到服务器,然后服务器根据提供商验证令牌,如果验证通过,则用户可以继续使用,如果没有,我们会显示相应的消息。此外,我们过去常常在每次用户在服务器端打开应用程序时检查令牌的验证,如果令牌仍然有效,则用户可以使用应用程序,如果不是,我们只是将用户带回登录屏幕,以便用户可以再次验证自己,因为令牌得到一段时间后过期。