Web services 使用FacebookOAuth保护RESTAPI

Web services 使用FacebookOAuth保护RESTAPI,web-services,api,rest,Web Services,Api,Rest,我正在构建一个应用程序/API,允许用户登录Facebook、Twitter或谷歌。我想知道允许这些用户使用相同的帐户登录API的最佳实践是什么 我的两个想法是,为每个请求将头中的auth令牌/cookie传递给API,并使用它在后端进行身份验证 运行我自己的OAuth设置,让用户在后端进行一次身份验证,以获取我的OAuth令牌,并从此使用这些令牌 我也在做同样的事情,我的解决方案是匹配您从这些API获得的电子邮件地址 对于Facebook,您需要最终用户的特殊许可才能在那里注册电子邮件地址。您

我正在构建一个应用程序/API,允许用户登录Facebook、Twitter或谷歌。我想知道允许这些用户使用相同的帐户登录API的最佳实践是什么

  • 我的两个想法是,为每个请求将头中的auth令牌/cookie传递给API,并使用它在后端进行身份验证
  • 运行我自己的OAuth设置,让用户在后端进行一次身份验证,以获取我的OAuth令牌,并从此使用这些令牌

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

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

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

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


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

    您的第一个解决方案正是我这样做的。由于我的所有rest服务都是无状态的,所以访问令牌进入报头,并在每个请求上由spring安全身份验证过滤器解析。我将grails服务器与spring security oauth插件一起使用。我们还运行一个允许使用会话cookie进行基于浏览器的访问的网站

    您提到用户可以选择使用Facebook、Twitter和Google登录。他们是否被迫登录到其中一个OpenId提供商?这正是我的问题,解决方案1看起来非常好,但我不明白API如何使用auth令牌来验证请求。您能解释一下吗?获取用户的电子邮件地址如何以任何方式促进身份验证?(如果API的消费者可以伪造他们想要的任何电子邮件地址,那么这根本就不安全)没有获得电子邮件地址本身,而是你能够从Facebook或Google获得令牌。这意味着用户成功地对该帐户进行了身份验证xml@Balveer解析soapxml的xml解析