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

问题描述:

我有使用Android帐户管理器进行验证的问题。我们有一个后端和一个Android应用程序,用户应该使用他的Facebook帐户登录我们的后端。目前我们展示了一个用于此目的的webview,它可以执行正常的oAuth 2,但是使用Android帐户管理器更加安全并且对用户来说更容易,所以我们希望切换。我的问题是,服务器如何验证用户是否真的假装他是谁。由于我们不能相信应用程序,所以我们必须从服务器端与fb进行交谈,以验证用户是否真的是他假装的人。基于相当similar idea我做了下面的图来问你,如果这是做了正确的方式,或者如果我错过了什么:使用Android帐户管理器在我的服务器上验证使用FB登录的用户

Steps before the user is authenticated at "My Server" 流程是这样的:

  1. 用户希望登录他的Facebook帐户
  2. Android的客户经理显示,他挑选的Facebook帐户
  3. 用户授予访问“我的应用”被允许访问他的FB数据
  4. Android的命中率'mount经理从Facebook服务器
  5. “我的应用”现在有身份验证令牌,可以访问用户的FB数据得到一个身份验证令牌
  6. “我的应用”通过了侨民转让技术方案,以“我的服务器”
  7. “我的服务器”现在通过从fb服务器获取用户数据来检查令牌是否有效如果令牌有效,“我的服务器”将使用“我的应用”为当前会话返回一个正常的临时有效cookie。用户现在用他的fb账户登录到我的服务器。

那么这是正确的方法吗?第6步是将令牌传递给“我的服务器”还是有更好的方法?顺便说一下,Facebook只是一个例子,我们使用不同的auth提供商,如FB,谷歌和Twitter,但流量应该是相同的每一个。

+0

“我的服务器”现在通过从fb服务器获取用户数据来检查令牌是否有效。这怎么可能是正确的? – 2017-03-15 15:47:07

+0

@ H.A.H。如果Facebook服务器返回有效用户并且不拒绝该令牌,则该令牌必须有效 – 2017-03-16 10:46:06

我不知道这是否正确的方式。但我想分享一下我们在解决这个问题时如何解决这个问题,这与您的解决方案非常相似。我们使用GoogleFacebook授权提供商。

我们的android应用程序发送令牌给服务器,然后服务器根据提供程序验证令牌,如果它被验证,那么用户如果不是我们会显示相应的消息,那么就很好。我们还用于每次当用户在服务器端打开应用程序时,如果令牌仍然有效,用户可以使用应用程序,如果不是,我们只需将用户返回登录屏幕,就可以检查令牌的验证,因此用户可以再次验证自己,因为令牌得到一段时间后过期。