Ios 我可以在iPhone应用程序上使用Facebook身份验证服务器端流,并且仍然可以进行客户端交互吗?

Ios 我可以在iPhone应用程序上使用Facebook身份验证服务器端流,并且仍然可以进行客户端交互吗?,ios,authentication,facebook-ios-sdk,Ios,Authentication,Facebook Ios Sdk,我有一个网站,使用Facebook身份验证登录用户。它使用OAuth2.0服务器端流进行身份验证,一切正常 我现在正在为同一个网站开发一个iPhone应用程序,并希望允许用户使用FB身份验证通过iPhone应用程序登录到该网站。Facebook iOS SDK提供了使用客户端流进行身份验证的机制,在我的iPhone应用程序中可以获得访问令牌 现在,为了使用我的服务器对用户进行身份验证,并使访问令牌可用于我的服务器,我考虑将此访问令牌发送到我的服务器(通过https),并根据我的数据库对用户进行

我有一个网站,使用Facebook身份验证登录用户。它使用OAuth2.0服务器端流进行身份验证,一切正常

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

现在,为了使用我的服务器对用户进行身份验证,并使访问令牌可用于我的服务器,我考虑将此访问令牌发送到我的服务器(通过https),并根据我的数据库对用户进行身份验证,并设置我自己的会话相关cookie。这是首选的还是建议的方法?我需要服务器上的访问令牌,因为我请求脱机访问权限,并让我的webapp直接从我的服务器与FB用户帐户交互

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

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

一种解决方案(在问题的第一条注释中)是使用UIWebView并模拟服务器端流。下面的评论提到了这种方法的问题,我还没有解决。

通过检查登录后webview重定向到的URL,可以解决这个问题


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

我的情况与此类似。我有一个iOS原生应用程序,需要知道用户是谁

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

然而,对于Facebook和Twitter,我似乎必须在每个页面中创建两个条目,一个用于网站,一个用于应用程序

这些都是各自独立的API键

对于iOS应用程序,我想出的唯一办法就是: *如果用户希望通过Facebook的Twitter验证/创建帐户,则通过UIWebView将其发送到网站登录

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

问题是,我相当不喜欢登录的网络视图。如果有人有什么建议,我洗耳恭听

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

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

curl "https://graph.facebook.com/{the user id}/friends?access_token={the token}
我不能使用客户端身份验证,也不能将访问令牌传递给服务器,以针对我的系统进行身份验证,也不能将其存储以供进一步使用

根据Facebook的页面:

访问令牌是可移植的。可以获取Facebook SDK在客户端生成的访问令牌,将其发送到服务器,然后代表此人从该服务器拨打电话


综上所述,我对SDK不允许使用三条腿的OAuth流感到困惑,尽管出于安全原因,他们建议使用访问代码而不是令牌。

总之,问题是什么?是的,我也通过UIWebView获得了该代码。知道Facebook iOS SDK允许使用,我感到非常失望没有支持在服务器端身份验证中使用代码的API,而且很难解释为什么我不能对其他人这样做。