用于 Air 应用程序和 Web 服务身份验证的 iOS Facebook SSO

标签 ios web-services authentication air single-sign-on

我们正在使用 Adob​​e Flex/Air 开发 iOS 应用程序。该应用程序使用需要通过 Facebook 登录进行用户身份验证的 Web 服务。目前,我们使用服务器端身份验证:在完成 facebook 登录的 WebView 中显示了一个登录 URL。这样我们就得到了一个可以在服务端使用的access_token。

这非常有效,但如果我们可以在 facebook ios 应用程序中使用单点登录,那真的会好得多。据我所知,这应该在客户端工作,但我还没有找到在服务器端对用户进行身份验证的方法。

facebook 的 access_token 在服务器端或客户端均有效,因此来自客户端登录的 access_token 不适用于服务器端。

提前感谢您的想法,

亨克

最佳答案

据我所知,您使这件事变得比实际情况要复杂得多。利用 Facebook iOS SDK,在您的应用程序中验证用户身份所涉及的所有繁重工作都由 Facebook SDK 处理。如果没有整个 Facebook SDK 的便利性,则无需独立提供登录表和管理应用本地存储与 Facebook 服务器之间的访问 token 交换。

此链接向您展示了如何在您的 iOS 应用程序中以本地方式实现 SSO。这真的很简单。 http://developers.facebook.com/docs/mobile/ios/build/#implementsso

然后,我了解到您将身份验证信息或中央用户数据库信息保存在外部服务器上。在FB客户端和你自己的服务器之间同步信息的最好方法是在你收到FB SDK返回的登录信息后,用你的服务器简单地检查一下。

这是一个简单的分割:

  1. 使用 Facebook 的标准 SDK 登录用户(参见上面的链接)。

  2. -didLogin 方法(或您的 Adob​​e AIR 环境中的任何等效方法)中,使用您的服务器检查 FB 返回的访问 token 。不确定您使用的是什么服务器架构,但可以肯定地说这将在 FB SDK 之外进行。此外,将访问 token 保存在应用程序的用户默认设置中,这样用户下次就不必再次登录。整个过程应该(并且必然会)感觉比听起来快得多。

  3. 如果与服务器的检查成功返回,则通知用户登录成功。如果不是,则显示一个错误 View ,解释用户被拒绝/未登录的原因。

为什么要这样做?原因很简单。可以安全地假设您让用户通过 Facebook 登录您的应用程序的原因是您可以请求用户的 Facebook 信息(即提要、照片、喜欢、评论等)。最简单(也是最好)的方法是通过 FB SDK 本身。 SDK 在幕后处理很多事情,例如随着时间的推移验证访问 token 、延长 token 生命周期、 token 有效性等。这样,您几乎不必担心在发生更改时同步服务器信息和实时客户端信息。只需通过 FB iOS SDK 进行身份验证,然后再进行其余的处理。

如果有什么我应该澄清的,或者即使我完全错过了你的问题的要点,请在下面发表评论——我往往会忙得不可开交,可能会偏离要点。 :)

干杯! 海妖

关于用于 Air 应用程序和 Web 服务身份验证的 iOS Facebook SSO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10950219/

相关文章:

ios - 指定 "show"(推)segue 的方向

ios - 图表实时更新图表 - 数据记录在一个 VC 上并绘制在另一个 VC 上

ios - 使用 iOS Swift 创建折线图

c# - JSON 和网络服务安全

php - 使用 httpclient 从 webservice 读取

android - 如何在 Android 中保存用户登录状态?

linux - git push 两步验证失败的解决方法(linux)

ios - Swift:无法修改弹出窗口中的图像

php - 使用 PHP 访问 Windows 共享

java - 建模允许像应用层协议(protocol)一样通过 HTTP 发送对象的有线协议(protocol)