使用 Facebook iOS SDK 的 OAuth2 授权代码

Posted

技术标签:

【中文标题】使用 Facebook iOS SDK 的 OAuth2 授权代码【英文标题】:OAuth2 Authorization Code with Facebook iOS SDK 【发布时间】:2014-03-03 12:23:10 【问题描述】:

我正在开发一个使用 Facebook 登录的 ios 应用。我已设置并运行 Facebook iOS SDK,但我客户的后端开发人员担心 Facebook 访问令牌的安全性。

使用 Facebook SDK,我们想从 Facebook 获取授权码,而不是访问令牌,并通过 App Key 和 App Secret 在服务器上获取访问令牌。有没有办法做到这一点?

注意:我使用这种方法登录(在 FBSession 上):

openActiveSessionWithReadPermissions:allowLoginUI:completionHandler:

【问题讨论】:

【参考方案1】:

回答我自己的问题:

目前的 Facebook iOS SDK 无法做到这一点,但您可以调用图形 API

https://graph.facebook.com/oauth/client_code?access_token=...&client_id=...&client_secret=...&redirect_uri= ...

用代码交换访问令牌。

但这根本不安全,因为您必须使用 App Secret 发布应用程序。

【讨论】:

没错,伙计。即使在 android 上,Facebook 登录 SDK 也不允许您检索身份验证代码,只能检索访问令牌。因此,如果您在应用中禁用 Facebook 登录产品的客户端 oauth 登录,您将无法使用 SDK 从设备登录 Facebook 应用。 但是,facebook 的 Account Kit SDK(使用电子邮件/电话号码登录)不会受此影响。它允许您指定是否要检索令牌或代码,并相应地仅返回。 Facebook 强制应用程序将令牌发送到服务器?为什么它不允许为后端获取授权码,以便后端可以自己获取令牌?这是一种更安全的方式。我想知道为什么他们强迫我们将访问令牌发送到后端。 6 年后......我正在做这个 Graph 请求,但在服务器端。这是因为我正在使用 omniauth-facebook gem 与 Ruby 后端交谈,我需要模拟完整的 OAuth 流程,就像它发生在网络上一样:(

以上是关于使用 Facebook iOS SDK 的 OAuth2 授权代码的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK 返回错误“com.facebook.sdk 错误 4”

facebook-ios-SDK 问题

在 Facebook-Ios-Sdk 中关闭 Facebook 会话

如何在使用 facebook-ios-sdk 的应用中实现聊天

Facebook iOS SDK:使用 Facebook 登录失败

使用 facebook SDK for ios 6 实现 Facebook 注销