繁体   English   中英

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

[英]How to build PHP API authentication with Facebook token and username/password

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

我想构建此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令牌。

您觉得呢? 您是否觉得更好的解决方案保持简单? 还是您看到此设计有任何问题?

干杯,马克西姆

Facebook的身份验证流程基于OAuth 2.0协议。 有关协议的更多信息,请参见此处

该流程遵循以下一般步骤:

  • 确定是否有人已经登录。
  • 如果未登录,则提示他们进行登录(带有登录对话框)。
  • 交换安全代码以确认身份。
  • 生成访问令牌。

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

Facebook提供了许多SDK供您使用,其中包括几个移动SDK。 建议您为移动应用程序使用适当的SDK。 与Facebook一起实施OAuth 2.0对话框比手动完成一切容易得多。 这里开始阅读。

您可以在第一个用户登录名中保存Facebook ID。 然后,在检查了活动的Facebook用户之后,您可以在Mysql中搜索并比较现有的Facebook ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM