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

时间:2012-07-09 18:42:56

标签: web-services security rest mobile oauth

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

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

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

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

1 个答案:

答案 0 :(得分:11)

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

  1. 应用程序本身是FB的注册应用程序 - 意味着它有一个App Key
  2. 当用户使用FB注册时 - 真正发生的事情是他们给予应用程序权限,允许它查看他们的数据,发布到他们的墙上等等(应用程序请求的任何权限)
  3. 一旦用户登录 - 应用程序就可以从FB请求他们的信息,只要它使用其应用程序密钥对服务进行身份验证。
  4. 所以 - 在您的应用程序中,您通常会存储用户的FB ID,当您提出数据请求(或发送到墙上的请求等)时 - 您提交应用程序密钥+用户的FB ID ,以及您需要提供的任何行动信息。然后,FB服务将回复您有权查看的数据 - 或执行操作,只要您有权执行该操作。

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

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

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

    它实质上意味着FB成为您的登录系统。你声称如下:

      

    “只要FB说用户就是他们说的那样 - 我也相信它。”

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

    1. Facebook Login
    2. API Reference > Login
    3. The Login Dialog
    4. Access Tokens and Types
    5. Login Architecture
    6. 一旦FB返回一个表示成功的标记 - 您可以断言通过FB API获取信息的人是使用您网站的人。因此 - 例如,如果您将FB ID作为主键存储在数据库中 - 您现在可以根据该值从您自己的API中过滤结果。

      往返可能看起来像:

      1. 未经身份验证的用户到达您的网站
      2. 重定向/提供登录按钮以通过Facebook进行身份验证
      3. 通过点击FB Graph API
      4. 确定用户现在经过身份验证的身份
      5. 您的UI脚本现在将从Graph收到的FB ID及其请求提交给您的API层
      6. 您的API图层根据FB ID(与您的用户记录关联)过滤数据 - 并返回正确的数据
      7. 希望这有帮助。如果您有任何疑问 - 请在评论中提问,我会尝试尽可能多地添加细节。