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

如何使用Facebook令牌和用户名/密码构建PHP API身份验证,php,api,restful-authentication,silex,Php,Api,Restful Authentication,Silex,我正在使用silex(php微框架)构建一个非常简单的API。 我对如何使用Facebook connect或用户名/密码对用户进行身份验证有一个想法 我想构建这个API,为我的移动应用程序提供数据。我的API使用HTTPS。 与Facebook的身份验证: Facebook连接在移动应用程序上实现 移动应用程序正在向API发送用户令牌和facebook_id API检查用户Facebook id请求/me?令牌=… API检查Facebook应用程序id是否正确/app?token=… ->

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

我想构建这个API,为我的移动应用程序提供数据。我的API使用HTTPS。 与Facebook的身份验证:

  • Facebook连接在移动应用程序上实现
  • 移动应用程序正在向API发送用户令牌和facebook_id
  • API检查用户Facebook id请求
    /me?令牌=…
  • API检查Facebook应用程序id是否正确
    /app?token=…
  • ->用户不存在,并且已通过身份验证
现在使用登录/密码:

  • 移动应用程序发送用户名和编码密码
  • API检查组合是否正确
  • ->用户不存在,并且已通过身份验证
问题是关于用户会话的。我真的不想对每个请求都做这个测试(例如,对于Facebook auth,有2个对Facebook的请求)

我想为用户打开一个会话并存储某种API令牌。令牌将被散列和腌制(salt+用户id+交付的时间)。我将把它存储在会话表中,只需要检查令牌是否仍然有效并且属于请求用户

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

你觉得怎么样?你认为有更好的解决方案保持简单吗? 或者你觉得这个设计有什么问题吗

干杯,
Maxime

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

流程遵循以下一般步骤:

  • 确定是否有人已登录
  • 如果他们没有登录,则提示他们登录(使用登录对话框)
  • 交换安全代码以确认身份
  • 生成一个访问令牌
客户机获得访问令牌后,应存储该令牌。然后,客户端可以使用访问令牌代表用户执行API请求。因此,一旦您拥有了访问令牌(除非该令牌已过期),就无需再次执行上述步骤


Facebook提供了许多SDK供您使用,包括一些移动SDK。我建议您为您的移动应用程序使用合适的SDK。在Facebook上实现OAuth2.0对话框将比手动完成所有事情容易得多。开始阅读。

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

也许您应该简化一下您的问题,因为要知道您到底在问什么很让人困惑(我认为这就是您投反对票的原因。)