目标: 允许用户使用Facebook进行身份验证,进入需要访问我正在运行的受保护Web服务的iOS应用程序。在iOS应用程序中进行Facebook身份验证的设计也可以访问安全的Web服务
假设: 目前已具备为那些选择不使用Facebook的标志使用本地认证(登记)制度
详情:
- 假设我们希望为用户提供选项,以便在未为我们的系统创建单独帐户/凭证的情况下使用Facebook登录。
- 因为我们支持我们自己的本地身份验证机制(用户名和密码),所以我们拥有自己的用户ID并颁发用于初始凭证验证后的后续交互的身份验证令牌。
我很惊讶Facebook在开发者文档中没有这方面的最佳实践。所有现有的文档要么假设您正在将FB auth构建到网站中,要么假设没有需要验证的服务的独立移动应用程序。
这是我的初步想法,这将如何设计,但要验证它是否正确。
- 客户端弹出的Facebook的iOS登录
- UI用户登录与Facebook的证书和获得访问令牌
- iOS应用程序通过访问令牌我们的服务器FB图形API使用访问
我们的服务器会谈令牌(a)验证令牌和(b)获取该访问令牌的FB用户ID。
例如我们的服务器会调用https://graph.facebook.com/me/?access_token=XYZ,这将返回JSON对象中的配置文件信息
假设它是有效的,我们的服务器从JSON对象中提取用户ID并检查用户是否已经有一个帐户。如果是这样,我们发布自己的身份验证票证给客户端用于该会话。如果用户没有帐户,我们将使用Facebook用户ID创建一个新帐户,分配我们自己的唯一用户ID并颁发我们的身份验证票证。
- 然后,客户端将身份验证信息传递给需要身份验证的后续交互。
这似乎是对我来说正确的方法,但不知道如果我失去了疯狂的基本和错误的(复杂的)路径。
这是如何解决?我正在考虑传递访问令牌,并在服务器上启动用户。似乎学术,但我问。 – 2011-04-22 17:43:41
这是我的实现使用rails和设计: http://stackoverflow.com/questions/7232490/how-to-use-http-authentication-in-devise-with-an-optional-omniauth-token-as- – Matt 2011-12-20 06:46:14
为什么不传递整个auth_hash,而不必两次调用FB API(一个来自iOS设备,一个来自服务器)? – bsiddiqui 2013-03-11 18:10:02