我可以使用Facebook OAuth来保护我的RESTful web服务吗



我正在编写一个手机应用程序,允许用户通过Facebook注册。一旦注册,用户就可以通过我将托管的RESTful web服务访问个性化信息。

我见过各种移动应用程序,它们似乎使用了类似的设置,但只向用户提供Facebook(或Twitter)OAuth身份验证。我想知道这是怎么做到的?

我想,为了保护这个web服务的安全,我可以使用HTTPS上的HTTPBasic身份验证,并将用户的FacebookOAuth访问令牌作为密码。

这安全吗?当其他应用程序只通过Facebook注册用户时,它们是如何处理安全问题的?

使用这种格式的应用程序通常会执行以下操作:

  1. 该应用程序本身是FB的注册应用程序,这意味着它有应用程序密钥
  2. 当用户使用FB注册时,真正发生的事情是他们授予应用程序权限,允许它查看他们的数据、张贴到他们的墙上等(无论应用程序请求什么权限)
  3. 一旦用户登录,应用程序就可以向FB请求他们的信息,只要它使用其应用程序密钥与服务进行身份验证即可

因此,在你的应用程序中,你通常会存储用户的FB ID,当你请求数据(或请求张贴到墙上等)时,你会提交你的应用密钥+用户的FB标识,以及你需要提供的任何行动信息。FB服务然后回复您有权查看的数据,或者执行操作,只要您有权执行。

在RESTful环境中,诀窍在于您应该是完全无状态的——这意味着没有会话被跟踪。然而,这很好,因为你的应用程序已经有了应用程序密钥,所以你只需要每个请求的用户FB ID。如果您只需将ID插入cookie中,或者在客户端进行管理,就足够简单了。这是怎么回事?

当你在Facebook上注册你的应用程序时,你必须提供一个你将托管该应用程序的URL。这主要是为了支持跨站点cookie和CORS请求。换句话说:只要你的请求来自FB识别的与你的应用程序密钥相关的URL,FB就会知道你网站上的用户是谁,因为它可以完全访问自己的cookie。

那么,在尝试使用FB到OAuth启用您的网站时,这对您意味着什么呢?

它本质上意味着FB成为您的登录系统。您正在断言以下内容:

"只要FB说用户就是他们说的那个人——我也相信。"

因此,当用户到达你的网站并点击"使用Facebook登录"按钮时,你的网站要么成功,要么失败。你可以通过查看Facebook开发者网站,特别是以下参考资料,获得更多关于如何实现这一点的信息:

  1. Facebook登录
  2. API参考资料>登录
  3. 登录对话框
  4. 访问令牌和类型
  5. 登录体系结构

一旦FB给你一个表示成功的令牌,你就可以断言你通过FB的API获得信息的人就是使用你网站的人。因此,例如,如果您将他们的FB ID存储在数据库中作为主键,您现在可以根据该值过滤来自您自己的API的结果。

往返可能看起来像:

  1. 未经身份验证的用户到达您的网站
  2. 重定向/提供登录按钮以通过Facebook进行身份验证
  3. 通过点击FB Graph API来确定用户现在已验证的身份
  4. 您的UI脚本现在将从Graph收到的FB ID及其请求提交给您的API层
  5. API层根据FB ID(与用户记录关联)过滤数据,并返回正确的数据

希望这会有所帮助。如果你有问题,请在评论中提问,我会尽可能补充更多细节。

最新更新