3

我有一个使用 Facebook 身份验证来登录用户的网站。它使用 oAuth 2.0 服务器端流程进行身份验证,一切正常。

我现在正在为同一网站开发 iPhone 应用程序,并希望允许用户使用 FB 身份验证通过 iPhone 应用程序登录网站。Facebook iOS SDK 提供了使用客户端流程进行身份验证的机制,在我的 iPhone 中应用程序获取访问令牌。

现在要使用我的服务器对用户进行身份验证,并使访问令牌对我的服务器可用,我想将此访问令牌发送到我的服务器(通过 https)并针对我的数据库对用户进行身份验证并设置我自己的会话相关 cookie。这是首选或建议的方法吗?我需要服务器上的访问令牌,因为我要求离线访问权限并让我的 web 应用程序直接与我的服务器上的 FB 用户帐户交互。

对我来说,一个更简单的选择是在我的 iPhone 应用程序上也使用服务器端流程进行身份验证,因为不需要做任何新的事情,并且网站或 iPhone 应用程序的服务器端代码是相同的。那可能吗?

我无法使用客户端身份验证并将访问令牌传递给我的服务器以对我的系统进行身份验证,也无法存储以供进一步使用。客户端身份验证收到的访问令牌与服务器端身份验证令牌完全不同,两者不能互换使用。我将不得不使用服务器端身份验证。

一个解决方案(在此处提供- 在问题的第一条评论中)是使用 UIWebView 并模拟服务器端流程。以下评论提到了这种方法的问题,我无法解决。

这已通过检查登录后 Web 视图重定向到的 URL 来解决。

另一个问题是,我的 iPhone 应用程序也进行了一些客户端交互(如 FBShare、写信给朋友的墙等)。如果我使用模拟的服务器端身份验证,我将不得不为这些交互进行另一个客户端身份验证,或者采取痛苦的方法,甚至通过我的服务器路由这些操作。后者绝对不可取。我该怎么做?我可以避免这种双重登录,因为这将是非常糟糕的用户体验?

4

3 回答 3

0

我也有类似的情况。我有一个需要知道用户是谁的 iOS 原生应用。

我有一个使用 Devise 的网站 (RoR),我可以通过它的 OmniAuth gem 登录/创建一个 Facebook/Twitter 帐户。

但是,对于 Facebook 和 Twitter,似乎我必须在每个中创建两个条目,一个用于网站,一个用于应用程序。

这些是每个单独的 API 密钥。

对于 iOS 应用程序,我想出的唯一方法是: * 如果用户想通过 Facebook 的 Twitter 验证/创建帐户,然后通过 UIWebView 将他们发送到网站以登录。

来自 iOS 的任何推文/FB 帖子实际上都将通过网站上的 API 发布到每个人,该 API 将使用用户的访问令牌代表他们发布推文。

问题是,我不喜欢 Webviews 登录。如果有人有任何建议,我会全力以赴。

于 2012-01-01T21:59:12.673 回答
0

“我不能使用客户端身份验证并将访问令牌传递给我的服务器以对我的系统进行身份验证,也无法存储以供进一步使用。客户端身份验证接收到的访问令牌与服务器端身份验证令牌完全不同,两者不能可以互换使用。我将不得不使用服务器端身份验证。

我刚发现它对面。客户端流和服务器端流认证生成的访问令牌完全相同。它们是“可互换的”,事实上,一旦您获得令牌,只要用户仍然登录并且令牌尚未过期,它就可以在任何地方使用。这行得通。

curl "https://graph.facebook.com/{the user id}/friends?access_token={the token}
于 2012-01-14T15:04:20.910 回答
0

我无法使用客户端身份验证并将访问令牌传递给我的服务器以对我的系统进行身份验证,也无法存储以供进一步使用。

根据 Facebook 的Securing Requests - Verifying Graph API Calls with appsecret_proof页面:

访问令牌是可移植的。可以获取由 Facebook 的 SDK 在客户端生成的访问令牌,将其发送到服务器,然后代表该人从该服务器进行调用。

说了这么多,我很困惑 SDK 不允许使用 3-legged OAuth 流,返回访问代码而不是令牌,尽管出于安全原因他们建议这样做。

于 2017-02-16T17:44:20.960 回答