3

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

这非常有效,但如果我们可以将单点登录与 facebook ios 应用程序一起使用会更好。据我所读,这应该在客户端工作,但我还没有找到一种方法来验证服务器端的用户。

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

提前感谢您的想法,

亨克

4

1 回答 1

1

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

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

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

这是一个简单的细分:

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

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

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

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

如果有什么我应该澄清的,或者即使我完全错过了你的问题的重点,请在下面评论——我倾向于继续前进,可能会偏离重点。:)

干杯! 海妖

于 2012-07-21T05:59:13.023 回答