在Google App Engine中保护RESTful API

时间:2012-07-24 10:27:48

标签: google-app-engine oauth webapp2

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

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

    要求:

    1. 只有在Web应用程序(Rails)中经过身份验证的用户才能访问App Engine上托管的API。
    2. 用户可以在Web应用程序(Rails)中拥有不同的角色,API(App Engine)需要知道与给定用户关联的角色以限制对特定数据的访问。
    3. 客户端应该能够通过AJAX直接调用API(App Engine),而无需通过Web应用程序(Rails)路由所有请求。
    4. 我正在寻找有关如何实施此类工作流程的建议。我应该使用OAuth(或OAuth2)来访问API吗? OAuth提供商是否应该在App Engine上运行,而Web应用程序(Rails)是否代表用户向API请求令牌?如果是这样,只允许Web应用程序(Rails)请求OAuth令牌的最佳方法是什么?或者我应该考虑一个完全不同的策略?

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

2 个答案:

答案 0 :(得分:1)

如果您考虑使用OAuth为您的安全层实施基于Google App Engine构建的API,建议您谨慎使用。我目前正在参与一个正在努力解决这个问题的项目。 GAE上的OAuth层仍然是新的,并被Google视为“实验性”。此时谷歌的文档很少。有什么开始here。如果你继续努力,我祝你万事如意,如果你这样做,我会尽力提供帮助。

答案 1 :(得分:0)

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

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