6

我试图弄清楚如何实现以下身份验证流程:

  1. 用户访问 Web 应用程序(最有可能使用 Ruby on Rails 编写)并进行身份验证(例如,用户名/密码)。
  2. 客户端通过基于 Google App Engine(Python、webapp2)构建的 RESTful API 提供的 AJAX 使用数据。

在此处输入图像描述

要求:

  1. 只有在 Web 应用程序 (Rails) 中经过身份验证的用户才能访问 App Engine 上托管的 API。
  2. 用户可以在 Web 应用程序 (Rails) 中拥有不同的角色,并且 API (App Engine) 需要知道哪些角色与给定用户关联以限制对某些数据的访问。
  3. 客户端应该能够直接通过 AJAX 调用 API(App Engine),而无需通过 Web 应用程序(Rails)路由所有请求。

我正在寻找有关如何实施此类工作流程的建议。我应该使用 OAuth(或 OAuth2)来访问 API 吗?OAuth 提供程序是否应该存在于 App Engine 上,并且 Web 应用程序 (Rails) 是否应该代表用户向 API 请求令牌?如果是这样,只允许 Web 应用程序(Rails)请求 OAuth 令牌的最佳方式是什么?还是我应该考虑完全不同的策略?

非常感谢任何建议。我也在寻找在上述上下文中实现 OAuth 的库的建议。

4

2 回答 2

1

如果您正在考虑使用 OAuth 为您的安全层实现基于 Google App Engine 构建的 API,我建议您谨慎行事。我目前参与了一个正在努力解决这个问题的项目。GAE 上的 OAuth 层仍然是新的,并且被 Google 认为是“实验性的”。谷歌的文档在这一点上是最少的。一切从这里开始。如果您尝试继续,我祝您一切顺利,如果您这样做,我会尽力提供帮助。

于 2012-07-28T01:15:34.170 回答
0

我对同样问题的解决方案是编写我自己的三向身份验证(如 OAuth):

  1. 用户在 RoR 服务器上通过身份验证后,它会使用临时令牌进行响应。此令牌存储在 RoR 服务器上,有效期为 60 秒,并包含用户的角色。
  2. 浏览器将此令牌(使用 AJAX)发送到 webapp2 服务器。这就像只使用令牌登录该服务器。
  3. webapp2 服务器将令牌转发到 RoR 服务器以确保其有效。
  4. RoR 服务器确保令牌没有过期并立即删除令牌以防止重复请求。如果令牌有效,则 RoR 服务器以用户的角色进行响应。
  5. 如果来自 RoR 服务器的响应良好,则 webapp2 服务器会响应浏览器的 AJAX 调用(在步骤 2 中),并使用 cookie 指示此用户现在已登录。会话应包含用户的角色。
  6. 对 webapp2 服务器的后续请求将包含 cookie,以便服务器可以根据用户的角色进行响应。
于 2015-04-30T23:55:30.017 回答