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

标签 web-services security rest mobile oauth

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

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

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

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

最佳答案

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

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

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

在 RESTful 环境中,诀窍在于您应该是完全无状态的 - 这意味着不会跟踪任何 session 。不过,这很好 - 因为您的应用程序已经有其应用程序 key - 所以您需要的只是每个请求的用户 FB ID。如果您只需将 ID 插入 cookie 中,或者在客户端进行管理,就很简单了。这个工作怎么样?

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

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

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

"As long as FB says the user is who they say they are - I trust it, too."

因此,当用户到达您的网站并单击“使用 Facebook 登录”按钮时,您的网站将返回成功或失败的信息。您可以获取有关如何实现这一点的更多信息,具体来说,通过查看 Facebook Developers网站,特别是以下引用文献:

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

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

往返可能类似于:

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

希望这对您有帮助。如果您有疑问 - 请在评论中提问,我会尽力添加更多详细信息。

关于web-services - 我可以使用 Facebook OAuth 来保护我的 RESTful Web 服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401108/

相关文章:

如果两个条件都为真,则 MySQL 插入如果不存在则更新

php - 哪些 $_SERVER 变量是安全的?

c++ - 用于查看互联网连接和构建防火墙的 Shell 脚本或 C++ 库

java - 如何从 ContainerRequestContext 对象获取引用者

php - 使用 REST api 进行 Paypal 支付处理

JAVA:HTTP POST 请求 - 异常

ios - 为什么我从 xml Web 服务器对 iOS 的响应中得到终止错误?

c# - 谷歌客户端登录授权和谷歌音乐

security - 基于用户或组成员身份的微服务架构中的实体级访问限制

c# - ServiceStack REST API 设计