使用Facebook OAuth保护REST API

20

我正在开发一个app/API,允许用户使用Facebook、Twitter或Google账户登录。我想知道如何为这些用户提供使用同一账户登陆API的最佳实践。

  1. 我考虑了几个想法,其中之一是将身份认证令牌/cookie在每个请求中以头文件的形式传递给API,并使用此方法在后端进行认证。
  2. 运行自己的OAuth设置,并使用户通过与后端一次身份验证来获取我的OAuth令牌,然后从那时起一直使用它们。

你提到用户可以选择使用Facebook、Twitter和Google登录。他们是否被强制使用其中一个OpenId提供商进行登录? - Andrew Church
这正是我的问题,解决方案1看起来非常好,但我不明白API如何使用授权令牌对请求进行身份验证。您能否请解释一下? - s0nica
2个回答

1

我正在做同样的事情,我的解决方案是匹配从这些API获取的电子邮件地址。

对于Facebook,您需要获得最终用户的特殊许可才能获取在那里注册的电子邮件地址。您可以通过在第一个oauth请求中添加&scope=email来实现此目的。

缺点是您需要从最终用户获得此权限,他们可能会拒绝。另一个缺点是用户需要为Google、Facebook和Twitter使用相同的电子邮件地址。

优点是用户记录会自动合并,因此如果用户第一次通过Google登录,第二次通过Facebook登录,则用户可以直接访问所有其数据。

另一种方法是通过让用户在已经通过Facebook登录的情况下登录到Google来手动合并其数据。然后,即使他们为两者使用不同的电子邮件地址,您也可以得出他们是同一用户的结论。但这是一种更繁琐的方法,因为您仍然需要合并应用程序的用户数据。


获取用户的电子邮件地址如何在任何方面促进身份验证?(如果API的使用者可以欺骗他们想要的任何电子邮件地址,那么这根本不安全) - Kirk Woll
不是获取电子邮件地址本身,而是你能够从Facebook或Google获得一个令牌的事实。这意味着用户已经成功地对那个账户进行了认证。 - Jeroen Kransen
如何解析SOAP XML - user1853341
@Balveer 解析 SOAP XML 的 XML 解析。 - user1853341

0

你的第一个解决方案正是我所采用的方式。由于我的所有REST服务都是无状态的,因此访问令牌放在头部,并且在每个请求上由Spring安全认证过滤器进行解析。我使用带有spring-security-oauth插件的Grails服务器。我们还运行一个网站,允许使用会话cookie进行基于浏览器的访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接