2012-07-24 59 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,以便服務器可以根據用戶的角色進行響應。