目标: 允许用户使用Facebook进行身份验证,进入需要访问我正在运行的受保护Web服务的iOS应用程序.
假设: 对于那些选择不使用Facebook登录的用户,有一个原生身份验证(和注册)系统.
细节:
我很惊讶Facebook在他们的开发者文档中没有这方面的最佳实践.所有现有文档要么假设您正在构建一个网站的FB auth,要么是一个没有需要身份验证的服务的独立移动应用程序.
这是我对如何设计这个问题的初步想法,但是想要验证它是否正确.
我们的服务器使用访问令牌与FB图形API进行通信,以(a)验证令牌和(b)获取该访问令牌的FB用户ID.
例如,我们的服务器将调用https://graph.facebook.com/me/?access_token=XYZ,它将返回JSON对象中的配置文件信息
假设它有效,我们的服务器从JSON对象中提取用户ID并检查用户是否已经拥有一个帐户.如果是这样,我们会向客户端发出我们自己的身份验证票据以用于该会话.如果用户没有帐户,我们使用Facebook用户ID创建一个新帐户,分配我们自己的唯一用户ID并发出我们的身份验证票.
这对我来说似乎是正确的方法,但不确定我是否遗漏了一些疯狂的基本内容并走错了(复杂的)路径.
我一直在寻求切换到OAuth以获取我的Twitter集成代码,现在有不到7周的截止日期(参见倒计时链接),跳转到OAuth更为重要.我一直在做基本身份验证,这非常容易.不幸的是,OAuth似乎并不是我会在几个小时内一起鞭打的东西.
http://www.countdowntooauth.com/
所以我希望使用一个库.我把以下列表放在一起.
我看到MPOAuth有一些很好的功能,有很多测试代码,但是有一个大问题.这是行不通的.应该通过Twitter进行身份验证的示例iPhone项目会导致其他人识别并记录为错误的错误.
http://code.google.com/p/mpoauthconnection/issues/detail?id=29
最后一次代码更改是3月11日,这个错误是在3月30日提交的.已经过了一个多月,这个关键错误还没有修复.所以我转到了MGTwitterEngine.
我下载了源代码并将其加载到Xcode中.我立即发现存在一些依赖项,并且README文件没有明确的步骤列表来获取这些依赖项并将它们与项目集成以便成功构建.我认为这表明该项目在黄金时段还不够成熟.我还看到,当一个应该足够时,该项目引用了2个JSON库.一个是TouchJSON,它对我来说效果很好,所以我再次不愿意依赖这个项目来完成我的应用程序.
我确实发现MGTwitterEngine使用OAuthConsumer,这是由Google Code上的OAuth项目托管的众多OAuth项目之一.
看起来OAuthConsumer乍一看是个不错的选择.它与其他OAuth库一起托管,并有一些很好的文档.我删除了代码,它构建没有错误,但确实有很多警告.当我在Xcode 3.2中运行新的Build and Analyze功能时,我看到50个分析器结果.许多被标记为潜在的内存泄漏,这可能导致使用此库的任何应用程序的不稳定性.
似乎没有明显的赢家,我必须在Twitter OAuth的最后期限之前采取措施.
有什么建议?