【问题标题】:How to build PHP API authentication with Facebook token and username/password如何使用 Facebook 令牌和用户名/密码构建 PHP API 身份验证
【发布时间】:2014-02-23 13:33:48
【问题描述】:

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

我想构建这个 API 来为我的移动应用程序提供数据。我的 API 使用的是 HTTPS。 Facebook 认证:

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

现在使用登录名/密码:

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

问题是关于用户会话的。我真的不想对每个请求都进行此测试(即,对于 Facebook 身份验证,对 Facebook 有 2 个请求)。

我正在考虑为用户打开一个会话并存储某种 API 令牌。令牌将被散列和加盐(salt + user_id + time 交付)。我会将它存储在会话表中,并且只需要检查令牌是否仍然有效并且属于请求用户。

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

你怎么看?您是否有更好的解决方案来保持简单? 或者您认为这种设计有什么问题?

干杯, 马克西姆

【问题讨论】:

  • 也许你应该稍微简化你的问题,因为知道你到底要什么是很令人困惑的(我认为这就是你投反对票的原因。)

标签: php api restful-authentication silex


【解决方案1】:

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

流程遵循以下一般步骤:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2019-03-15
      • 2018-07-13
      • 1970-01-01
      相关资源
      最近更新 更多