我正在开发一个app/API,允许用户使用Facebook、Twitter或Google账户登录。我想知道如何为这些用户提供使用同一账户登陆API的最佳实践。
- 我考虑了几个想法,其中之一是将身份认证令牌/cookie在每个请求中以头文件的形式传递给API,并使用此方法在后端进行认证。
- 运行自己的OAuth设置,并使用户通过与后端一次身份验证来获取我的OAuth令牌,然后从那时起一直使用它们。
我正在开发一个app/API,允许用户使用Facebook、Twitter或Google账户登录。我想知道如何为这些用户提供使用同一账户登陆API的最佳实践。
我正在做同样的事情,我的解决方案是匹配从这些API获取的电子邮件地址。
对于Facebook,您需要获得最终用户的特殊许可才能获取在那里注册的电子邮件地址。您可以通过在第一个oauth请求中添加&scope=email
来实现此目的。
缺点是您需要从最终用户获得此权限,他们可能会拒绝。另一个缺点是用户需要为Google、Facebook和Twitter使用相同的电子邮件地址。
优点是用户记录会自动合并,因此如果用户第一次通过Google登录,第二次通过Facebook登录,则用户可以直接访问所有其数据。
另一种方法是通过让用户在已经通过Facebook登录的情况下登录到Google来手动合并其数据。然后,即使他们为两者使用不同的电子邮件地址,您也可以得出他们是同一用户的结论。但这是一种更繁琐的方法,因为您仍然需要合并应用程序的用户数据。
你的第一个解决方案正是我所采用的方式。由于我的所有REST服务都是无状态的,因此访问令牌放在头部,并且在每个请求上由Spring安全认证过滤器进行解析。我使用带有spring-security-oauth插件的Grails服务器。我们还运行一个网站,允许使用会话cookie进行基于浏览器的访问。