2

我正在将一个单一的 Rails 应用程序重构为一个带有 Backbone.js 前端的纯 JSON API。其他智能手机应用程序前端将在不久的将来跟进,向公众开放 API 的可能性已在办公室周围讨论。

出于这个原因,我认为我会在第一轮就正确地完成这项工作,并使用 OAuth 2.0 保护我们的 REST API,以便基于它构建的每个应用程序 - 包括我们内部构建的应用程序,都是“只是另一个 OAuth 客户端”,这也将为我们提供通常的细节,例如速率限制、密钥撤销和对可以免费操作的资源的限制。

到目前为止,我一直在关注 Doorkeeper gem 上的Railscasts 集(警告,这是一个专业集)来保护我们自己的 API 并将我们面向用户的 Web 应用程序注册为客户端。

现在有趣的部分 - 原始应用程序允许用户通过 Omniauth gem 通过 Facebook、Google、Twitter 等登录。据我了解,OAuth 关注的是授权客户端,而不是用户身份验证,所以我们仍然需要我们已经拥有的 OmniAuth 流程。

但:

  • “Omniauthing”控制器应该在哪里——在 API 或 Web 客户端中?
  • 应该如何将用于验证用户的“Omniauth 位”连接到“OAuth 位”?

更新:客户端可能只是一个 Backbone 应用程序,或者它可能是一个 Backbone 应用程序与一个“瘦 Rails 网站包装器”配对,它没有自己的 DB,但使用 ActiveResource 在 Backbone 应用程序和 API 之间进行调解。这样做的好处是让我们处理“可以保守秘密的客户”。在这种情况下,“Omniauthing”控制器可以存在于 Rails 客户端应用程序中(如果有任何用处)。

一个类似的 SO 问题仅讨论了使用 Facebook 登录,但是虽然答案很明确,说应该只有一个授权服务器 - Facebook - 它没有说明将用户身份验证的结果提供给资源服务器。

4

0 回答 0