我有一个使用 Facebook 身份验证来登录用户的网站。它使用 oAuth 2.0 服务器端流程进行身份验证,一切正常。
我现在正在为同一网站开发 iPhone 应用程序,并希望允许用户使用 FB 身份验证通过 iPhone 应用程序登录网站。Facebook iOS SDK 提供了使用客户端流程进行身份验证的机制,在我的 iPhone 中应用程序获取访问令牌。
现在要使用我的服务器对用户进行身份验证,并使访问令牌对我的服务器可用,我想将此访问令牌发送到我的服务器(通过 https)并针对我的数据库对用户进行身份验证并设置我自己的会话相关 cookie。这是首选或建议的方法吗?我需要服务器上的访问令牌,因为我要求离线访问权限并让我的 web 应用程序直接与我的服务器上的 FB 用户帐户交互。
对我来说,一个更简单的选择是在我的 iPhone 应用程序上也使用服务器端流程进行身份验证,因为不需要做任何新的事情,并且网站或 iPhone 应用程序的服务器端代码是相同的。那可能吗?
我无法使用客户端身份验证并将访问令牌传递给我的服务器以对我的系统进行身份验证,也无法存储以供进一步使用。客户端身份验证收到的访问令牌与服务器端身份验证令牌完全不同,两者不能互换使用。我将不得不使用服务器端身份验证。
一个解决方案(在此处提供- 在问题的第一条评论中)是使用 UIWebView 并模拟服务器端流程。以下评论提到了这种方法的问题,我无法解决。
这已通过检查登录后 Web 视图重定向到的 URL 来解决。
另一个问题是,我的 iPhone 应用程序也进行了一些客户端交互(如 FBShare、写信给朋友的墙等)。如果我使用模拟的服务器端身份验证,我将不得不为这些交互进行另一个客户端身份验证,或者采取痛苦的方法,甚至通过我的服务器路由这些操作。后者绝对不可取。我该怎么做?我可以避免这种双重登录,因为这将是非常糟糕的用户体验?