使用 Android 帐户管理器在我的服务器上验证使用 FB 登录的用户
Posted
技术标签:
【中文标题】使用 Android 帐户管理器在我的服务器上验证使用 FB 登录的用户【英文标题】:Authenticate user logged in with FB at my server using the Android Account Manager 【发布时间】:2015-04-24 23:59:39 【问题描述】:我有一个关于使用 android 帐户管理器进行身份验证的问题。我们有一个后端和一个 Android 应用程序,用户应该使用他的 Facebook 帐户登录我们的后端。目前,我们为此目的展示了一个 webview,它执行正常的 oAuth 2,但使用 Android 帐户管理器对用户来说更安全、更容易,因此我们想要切换。我的问题是,服务器如何验证用户是否真的是他假装的人。由于我们无法信任该应用程序,因此我们必须从服务器端与 fb 交谈,以验证用户是否真的是他假装的那个人。基于一个相当similar idea我制作了下图来问你这是否是正确的方法或者我是否遗漏了什么:
流程如下所示:
-
用户想使用他的 Facebook 帐户登录
Android 客户经理显示在他选择 facebook 帐户的位置
用户授予“我的应用”访问他的 fb 数据的权限
Android 客户经理从 Facebook 服务器获取身份验证令牌
“我的应用程序”现在具有身份验证令牌,可以访问用户的 fb 数据
“我的应用程序”将令牌传递给“我的服务器”
“我的服务器”现在通过从 fb 服务器获取用户数据来检查令牌是否有效
如果令牌有效,“我的服务器”会为当前与“我的应用程序”的会话返回一个正常的临时有效 cookie。用户现在使用他的 fb 帐户登录到我的服务器。
那么这是正确的方法吗?第 6 步是将令牌传递给“我的服务器”一次的好主意还是有更好的方法?顺便说一句,Facebook 只是这里的一个例子,我们使用不同的身份验证提供程序,如 FB、Google 和 Twitter,但每个人的流程应该是相同的。
【问题讨论】:
“我的服务器”现在通过从 fb 服务器获取用户数据来检查令牌是否有效。这怎么可能是正确的? @H.A.H.如果 facebook 服务器返回有效用户并且不拒绝令牌,则它必须是有效的 【参考方案1】:我不知道这是否正确。但我想分享我们如何在我们的案例中解决这个问题,这与您的解决方案几乎相同。我们使用的是 Google 和 Facebook 身份验证提供商。
我们的 android 应用程序将令牌发送到服务器,然后服务器根据提供者验证令牌,如果它被验证,那么用户很好,如果它不是我们显示适当的消息。此外,我们曾经在每次用户在服务器端打开应用程序时检查令牌的验证,如果令牌仍然有效,用户可以使用应用程序,如果不是,我们只需将用户带回登录屏幕,以便用户可以再次验证自己,因为令牌获取一段时间后过期。
【讨论】:
以上是关于使用 Android 帐户管理器在我的服务器上验证使用 FB 登录的用户的主要内容,如果未能解决你的问题,请参考以下文章
在我的 Android 应用中验证 Google 帐户的最佳工作流程是啥?
如何使用 Node 服务器验证 Android Google 登录
如何使用 android 的帐户管理器获取多个范围的身份验证令牌