目标: 允许用户通过Facebook身份验证进入iOS应用程序,该应用程序需要访问我正在运行的受保护的Web服务。
假设: 为那些不选择使用Facebook登录的用户提供了本机身份验证(和注册)系统。
细节:
- 假设我们要为用户提供使用Facebook登录的选项,而无需为我们的系统创建单独的帐户/凭据。
- 因为我们支持我们自己的本机身份验证机制(用户名和密码),所以我们拥有自己的用户ID并发出身份验证令牌,该令牌用于初始凭据验证后的后续交互。
我很惊讶Facebook在其开发人员文档中没有针对此的最佳实践。现有的所有文档都是假设您正在将FB身份验证构建到网站中,或者是一个独立的移动应用程序,其中不包含需要身份验证的服务。
这是我对如何设计的初步想法,但想验证它是否正确。
- 客户端弹出Facebook iOS登录
- UI用户使用Facebook凭据登录并获取访问令牌
- iOS App将访问令牌传递给我们的服务器
我们的服务器使用访问令牌与FB graph API进行对话,以(a)验证令牌,并(b)获取该访问令牌的FB用户ID。
例如,我们的服务器将调用https://graph.facebook.com/me/?access_token=XYZ,它将在JSON对象中返回配置文件信息
假设它是有效的,我们的服务器从JSON对象提取用户ID,并检查用户是否已经有一个帐户。如果是这样,我们会向客户端颁发自己的身份验证票证以用于该会话。如果用户没有帐户,我们将使用Facebook用户ID创建一个新帐户,分配我们自己的唯一UserID并颁发身份验证票证。
- 然后,客户端将身份验证票证传回需要身份验证的后续交互。
这对我来说似乎是正确的方法,但是不确定我是否缺少一些疯狂的基本知识并且走错了(复杂的)道路。