如何使用Facebook令牌和用户名/密码构建PHP API身份验证

时间:2014-01-31 00:10:25

标签: php api restful-authentication silex

我正在使用silex(php微框架)构建一个非常简单的API。 我知道如何使用Facebook连接或用户名/密码验证用户。

我想构建此API以向我的移动应用提供数据。我的API使用HTTPS。 使用Facebook进行身份验证:

  • Facebook Connect发生在移动应用
  • 移动应用将用户令牌和facebook_id发送到API
  • API检查用户的Facebook ID请求/me?token=...
  • API检查Facebook app_id是否正确/app?token=...
  • - >用户确实存在并经过身份验证

现在使用登录/密码:

  • 移动应用程序发送用户名和编码密码
  • API检查组合是否正确
  • - >用户确实存在并经过身份验证

问题是关于用户会话。我真的不想对每个请求做这个测试(例如,对于Facebook认证,有2个请求到Facebook)。

我正在考虑为用户打开一个会话并存储某种API令牌。令牌将被哈希和盐渍(盐+ user_id +时间传递)。我会将它存储在会话表中,只需要检查令牌是否仍然有效并且属于请求用户。

因此,移动应用程序只会为每个请求发送用户ID + api令牌。

你怎么看待它?你有一个更好的解决方案,保持简单吗? 或者你看到这个设计有什么问题吗?

干杯, 马克西姆

2 个答案:

答案 0 :(得分:1)

Facebook的身份验证流程基于OAuth 2.0协议。有关该协议的更多信息可以在here找到。

流程遵循以下一般步骤:

  • 确定某人是否已登录。
  • 如果他们没有登录,请提示他们这样做(使用登录对话框)。
  • 交换安全代码以确认身份。
  • 生成访问令牌。

一旦您的客户端获得了访问令牌,它就应该存储该令牌。然后,客户端可以使用访问令牌代表用户执行API请求。因此,一旦拥有访问令牌,就不需要再次执行上述步骤(除非该令牌已过期)。

Facebook提供了许多SDK供您使用,包括几个移动SDK。我建议您为移动应用使用适当的SDK。使用Facebook实现OAuth 2.0对话框比手动完成所有操作要容易得多。开始阅读here

答案 1 :(得分:0)

您可以在第一次用户登录时保存Facebook ID。然后在检查活跃的facebook用户后,您可以在Mysql中搜索并比较现有的Facebook Id。