Facebook使用OAuth / XAuth(?)以编程方式登录

时间:2010-09-28 20:36:54

标签: objective-c facebook oauth ios4 xauth

我正在创建一个需要能够与Facebook分享故事的应用程序,使用以编程方式设置的密码和电子邮件地址(不使用 Facebook-Connect ,主要是因为我想要我的自己的设计,无论您是从应用程序登录Twitter还是Facebook)。

我已经通过Twitter和XAuth完成了这项工作,这非常有效。有什么方法可以用Facebook或者只是常规OAuth来实现同样的目标吗? (或Facebook是否支持XAuth ,这会让它变得容易多了?)
有没有其他方法可以达到我的目的?

4 个答案:

答案 0 :(得分:5)

理论上,您的应用永远不会看到用户的密码。

在实践中,由于代码都在您的应用程序中运行,因此获取用户密码是微不足道的(并且提供类似的 UI以获取用户密码也是微不足道的。)

由于您拥有完整的源代码,因此只需调用使用用户名和密码登录的功能即可。我不推荐这个:

  • Facebook可能不喜欢它,并可能撤销您应用的API密钥。
  • 你不应该存储用户名/密码,除非你必须在NSUserDefaults中使用尤其(Settings.app使用),因为它完全没有加密。
  • Setting.app不支持密码字段。
  • 用户不必退出您的应用,转到“设置”,添加登录详细信息,然后切换回您的应用。使用“多任务”可以更好地,但效果不是更好。

使用普通的Facebook登录界面有什么问题?

编辑:更多详细信息......

  • AFAIK,您无法可靠地加密由Settings.app保存的NSUserDefaults。您无法决定将其写入哪个文件(我认为是Library / Preferences / com.example.myapp.plist)。在iOS 4中,您可以设置NSFileProtectionKey = NSFileProtectionComplete,但这有很多问题:
    • 您在应用内设置此功能。用户可以在运行应用程序之前访问Settings.app。
    • 虽然可以在你的app zip / ipa中包含Library / Preferences / com.example.myapp.plist,但我认为不可能包含NSFileProtectionKey属性。
    • NSUserDefaults通过将新plist写入新文件并将文件重命名为旧文件来“原子地”更新plist。新文件不太可能有NSFileProtectionKey = NSFileProtectionComplete。
    • 最终,如果您将数据控制权交给不能保证安全性的API,那么它就是不安全的(NSUserDefaults似乎很容易留下很多的临时文件......)。 Apple提供了专门用于存储密码的钥匙链(甚至还有一些不错的示例代码!);用它。
  • Apple不建议使用Settings.bundle以及您自己的设置屏幕 - 您应该选择其中一个。

答案 1 :(得分:2)

对于使用OAuth的网站,例如Facebook,您尝试做的是规避用户安全。有关OAuth的简单描述,请查看以下链接:http://bit.ly/awynlU简短版本是Facebook负责对用户进行身份验证,并在其服务器上进行身份验证。正如tc所提到的,理论是你永远不会看到密码。

好,坏,或无动于衷,你想做的事情应该被阻止。如果可以这样做,则违反了网站设置的安全模型 - 在这种情况下是Facebook。

很明显,Twitter也在向OAuth迈进。根据我的信息,“从8月31日开始,所有申请都需要使用”OAuth“来访问您的Twitter帐户。”

答案 2 :(得分:1)

我想知道为什么你真的想要采用这种hackish方式。用户只需要登录一次就可以获得OAuth2令牌,然后你可以在那里发布你想要Facebook的次数,甚至没有要求用户登录Facebook。

答案 3 :(得分:1)

您应该可以使用较新的facebook SDK来实现Facebook单点登录。这样,如果用户已经在他们的设备上安装了facebook应用程序,那么他们已经登录,并且它比旧的连接弹出窗口实现更好的体验。必须允许您的应用访问其帐户,但不使用丑陋的登录屏幕。

如果他们没有安装Facebook应用程序,它将保释到浏览器。

这两种方法都会使用网址处理功能在经过身份验证后返回您的应用。

在此处详细了解:http://developers.facebook.com/docs/mobile/ios/build/#implementsso

在本地实现您自己的登录屏幕方面,这是针对Facebook的TOS,因为他们想要一致且熟悉的登录平台,以避免普遍的网络钓鱼问题等。他们大力推动教育他们的用户只提供他们的用户名和密码合法页面。