2012-07-24 7 views
5

Ich versuche, herauszufinden, wie die folgenden Authentifizierungsablauf zu implementieren:RESTful API in Google App Engine Sicherung

  1. Der Benutzer greift auf eine Web-Anwendung (höchstwahrscheinlich geschrieben on Rails Ruby verwenden) und authentisiert (zB Benutzername/Passwort).
  2. Der Client verwendet Daten über AJAX, die von einer RESTful-API bereitgestellt werden, die auf Google App Engine (Python, webapp2) basiert.

enter image description here

Anforderungen:

  1. Nur in der Web-Anwendung authentifiziert Benutzer (Rails) sollten die API auf App Engine gehostet zugreifen können.
  2. Benutzer können unterschiedliche Rollen in der Webanwendung (Rails) haben und die API (App Engine) muss wissen, welche Rollen mit dem angegebenen Benutzer verknüpft sind, um den Zugriff auf bestimmte Daten zu beschränken.
  3. Der Client sollte in der Lage sein, die API (App Engine) direkt über AJAX aufzurufen, ohne alle Anfragen über die Webanwendung (Rails) weiterleiten zu müssen.

Ich bin auf der Suche nach Vorschlägen zur Implementierung eines solchen Workflow. Soll ich OAuth (oder OAuth2) für den Zugriff auf die API verwenden? Sollte der OAuth-Provider in App Engine leben und die Webanwendung (Rails) das API für einen Token im Namen des Benutzers fragen? Wenn ja, wie kann man nur die Webanwendung (Rails) OAuth-Token anfordern? Oder sollte ich eine völlig andere Strategie in Betracht ziehen?

Alle Vorschläge werden sehr geschätzt. Ich suche auch nach Vorschlägen von Bibliotheken, um OAuth im obigen Kontext zu implementieren.

Antwort

1

Ich schlage vor, dass Sie Vorsicht walten lassen, wenn Sie eine API implementieren möchten, die auf der Google App Engine mit OAuth für Ihre Sicherheitsschicht basiert. Ich bin derzeit an einem Projekt beteiligt, das genau darum bemüht ist, dieses Problem zu lösen. Die OAuth-Ebene über der GAE ist noch neu und von Google als "experimentell" angesehen. Die Dokumentation von Google ist an dieser Stelle minimal. Was dort ist, beginnt here. Ich wünsche dir das Beste, wenn du versuchst weiterzumachen, und ich werde mein Bestes geben, um dir Hilfe anzubieten, wenn du es tust.

0

Meine Lösung für dieses gleiche Problem war meine eigene Drei-Wege-Authentifizierung zu schreiben (wie OAuth):

  1. Nachdem der Benutzer auf dem RoR-Server authentifiziert wird, ist es mit einem temporären Token reagiert. Dieses Token wird auf dem RoR-Server gespeichert, ist für 60 Sekunden gültig und enthält die Rollen des Benutzers.
  2. Der Browser sendet dieses Token (mit AJAX) an den webapp2-Server. Es ist, als würde man sich auf diesem Server nur mit dem Token einloggen.
  3. Der webapp2-Server leitet das Token an den RoR-Server weiter, um sicherzustellen, dass es gültig ist.
  4. Der RoR-Server stellt sicher, dass das Token nicht abgelaufen ist und löscht das Token sofort, um doppelte Anfragen zu verhindern. Wenn das Token gültig ist, antwortet der RoR-Server mit den Benutzerrollen.
  5. Wenn die Antwort vom RoR-Server gut ist, antwortet der webapp2-Server auf den AJAX-Aufruf des Browsers (in Schritt 2) mit einem Cookie, der angibt, dass dieser Benutzer jetzt angemeldet ist. Die Sitzung sollte die Benutzerrollen enthalten.
  6. Nachfolgende Anforderungen an den webapp2-Server enthalten das Cookie, sodass der Server entsprechend den Rollen des Benutzers antworten kann.