使用Facebook OAuth保护REST API

时间:2011-09-06 23:23:10

标签: web-services api rest

我正在构建一个允许用户使用Facebook,Twitter或Google登录的应用/ API。我想知道允许这些用户使用同一帐户登录API的最佳做法是什么。

  1. 我所拥有的一些想法是将标头中的身份验证令牌/ cookie传递给每个请求的API,并使用它在后端进行身份验证。
  2. 运行我自己的OAuth设置,并让用户通过后端进行一次身份验证,以获取我的OAuth令牌,然后使用这些令牌。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

另一种方法是,当他们已经通过Facebook登录时,通过让他们登录Google来手动合并他们的数据。然后,您可以得出结论,即使他们使用不同的电子邮件地址,他们也是同一个用户。但这是一种更乏味的方法,因为您仍然需要合并来自两个帐户的应用程序的用户数据。

答案 1 :(得分:0)

您的第一个解决方案就是我的方式。由于我的所有其他服务都是无状态服务,因此访问令牌位于标头中,并在每个请求中由Spring安全验证过滤器进行解析。我使用带有spring-security-oauth插件的grails服务器。我们还运行一个网站,允许使用会话cookie进行基于浏览器的访问。