【问题标题】:Can I use Facebook OAuth to secure my RESTful web service?我可以使用 Facebook OAuth 来保护我的 RESTful Web 服务吗?
【发布时间】:2012-12-25 04:06:14
【问题描述】:

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

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

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

这安全吗?其他应用仅通过 Facebook 注册用户时如何处理安全问题?

【问题讨论】:

    标签: web-services security rest mobile oauth


    【解决方案1】:

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

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

    所以 - 在您的应用程序中,您通常会存储用户的 FB ID,并且当您请求数据(或发布到墙上的请求等)时 - 您提交您的应用密钥 + 用户的 FB ID ,以及您需要提供的任何操作信息。然后,FB 服务会回复您有权查看的数据 - 或执行操作,只要您有权执行它。

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

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

    那么这对您尝试使用 FB 来启用您的网站的 OAuth 意味着什么?

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

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

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

    1. Facebook Login
    2. API Reference > Login
    3. The Login Dialog
    4. Access Tokens and Types
    5. Login Architecture

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

    往返可能看起来像:

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

    希望这会有所帮助。如果您有任何问题 - 请在 cmets 中提问,我会尽量添加更多细节。

    【讨论】:

    • 好答案。几个月前我一直在寻找这些信息,但我没有找到比这更好的信息,向你致敬。
    猜你喜欢
    • 2012-11-03
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2013-12-29
    相关资源
    最近更新 更多