2012-07-24 68 views
5

我试图找出如何实现以下认证流程:在谷歌应用程序保护的RESTful API引擎

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

enter image description here

要求:

  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的建议。

回答

1

如果您正在考虑在安全层中使用OAuth使用Google App Engine构建的API,建议您谨慎使用。我目前正在参与一个正在努力解决这个问题的项目。 GAE上的OAuth层仍然是新的,Google认为它是“实验性”的。目前Google的文档很少。有什么开始here。如果你想继续下去,我希望你是最好的,如果你愿意,我会尽我所能提供帮助。

0

我这个同样的问题,解决办法是写我自己的三路认证(如OAuth的):用户RoR的服务器上认证

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