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

Ric*_*ell 9 security rest mobile web-services oauth

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

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

我认为,为了保护这个Web服务,我可以使用HTTPS的HTTP基本身份验证,用户的Facebook OAuth访问令牌作为他们的密码.

这样安全吗?当其他应用程序仅通过Facebook注册用户时,如何处理安全性?

Tro*_*ord 11

使用此类格式的应用通常会执行以下操作:

  1. 应用程序本身是FB的注册应用程序 - 意味着它有一个App Key
  2. 当用户使用FB注册时 - 真正发生的是他们给予应用程序权限,允许它查看他们的数据,发布到他们的墙上等(应用程序请求的任何权限)
  3. 一旦用户登录 - 应用程序就可以从FB请求他们的信息,只要它使用其App Key对服务进行身份验证即可.

因此 - 在您的应用程序中,您通常会存储用户的FB ID,当您提出数据请求(或发送到墙上的请求等)时 - 您提交应用程序密钥+用户的FB ID,以及您需要提供的任何行动信息.然后,FB服务将回复您有权查看的数据 - 或执行操作,只要您有权执行该操作即可.

在RESTful环境中,诀窍在于您应该完全无状态 - 这意味着不会跟踪任何会话.这很好,但是 - 因为您的应用程序已经拥有其应用程序密钥 - 所以您只需要每个请求的用户FB ID.如果您只是将ID插入cookie中或者在客户端管理它就足够了.这是怎么回事?

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

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

它本质上意味着FB成为您的登录系统.您声明以下内容:

"只要FB说用户就是他们所说的人 - 我也相信它."

因此 - 当用户到达您的站点并单击"使用Facebook登录"按钮时 - 您的站点将返回成功或失败.您可以通过查看Facebook Developers网站,特别是以下参考资料,获得有关如何实现此信息的更多信息:

  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(与您的用户记录关联)过滤数据 - 并返回正确的数据

希望这是有帮助的.如果您有任何疑问 - 请在评论中提问,我会尽量添加更多详细信息.