使用 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】:

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

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

【讨论】:

以上是关于使用 Android 帐户管理器在我的服务器上验证使用 FB 登录的用户的主要内容,如果未能解决你的问题,请参考以下文章

在我的 Android 应用中验证 Google 帐户的最佳工作流程是啥?

如何使用 Node 服务器验证 Android Google 登录

如何使用 android 的帐户管理器获取多个范围的身份验证令牌

我可以使用 Android Studio Avd 管理器在 Windows 上运行 iOS 模拟器吗?

在SSIS包中使用AD服务帐户

如何使用护照在我的 node.js 服务器上验证 android 应用程序的 GPGS 令牌