2012-07-24 21 views
5

Sto cercando di capire come implementare il seguente flusso di autenticazione:Protezione RESTful API in Google App Engine

  1. L'utente accede a un'applicazione web (più probabilità di essere scritto utilizzando Ruby on Rails) ed autentico (ad es. nome utente/password).
  2. Il client utilizza i dati tramite AJAX fornito da un'API RESTful creata su Google App Engine (Python, webapp2).

enter image description here

Requisiti:

  1. Solo gli utenti autenticati nell'applicazione web (Rails) dovrebbero essere in grado di accedere all'API ospitato su App Engine.
  2. Gli utenti possono avere ruoli diversi nell'applicazione Web (Rails) e l'API (App Engine) deve sapere quali ruoli sono associati a un determinato utente per limitare l'accesso a determinati dati.
  3. Il client deve essere in grado di chiamare l'API (App Engine) direttamente tramite AJAX, senza instradare tutte le richieste tramite l'applicazione Web (Rails).

Sto cercando suggerimenti su come implementare tale flusso di lavoro. Dovrei usare OAuth (o OAuth2) per accedere all'API? Il provider OAuth dovrebbe vivere su App Engine e l'applicazione Web (Rails) richiede all'API un token per conto dell'utente? In tal caso, qual è il modo migliore per consentire solo all'applicazione Web (Rails) di richiedere token OAuth? O dovrei considerare una strategia completamente diversa?

Qualsiasi suggerimento è molto apprezzato. Sto anche cercando suggerimenti di librerie per implementare OAuth nel contesto sopra.

risposta

1

Ti suggerisco di prestare attenzione se stai considerando l'implementazione di un'API basata su OAuth per il tuo livello di sicurezza. Sono attualmente coinvolto in un progetto che sta lottando per risolvere esattamente questo problema. Il livello OAuth sul GAE è ancora nuovo e considerato da Google come "sperimentale". La documentazione di Google è minima a questo punto. Ciò che inizia è here. Ti auguro il meglio se provi a procedere, e farò del mio meglio per offrire aiuto se lo fai.

0

La mia soluzione a questo stesso problema è stato quello di scrivere la mia propria autenticazione a tre vie (come OAuth):

  1. Dopo che l'utente è autenticato sul server RoR, risponde con un token temporaneo. Questo token è memorizzato sul server RoR, è valido per 60 secondi e contiene i ruoli dell'utente.
  2. Il browser invia questo token (utilizzando AJAX) al server webapp2. È come accedere su quel server usando solo il token.
  3. Il server webapp2 inoltra il token al server RoR per assicurarsi che sia valido.
  4. Il server RoR si assicura che il token non sia scaduto e cancella immediatamente il token per evitare richieste duplicate. Se il token è valido, il server RoR risponde con i ruoli dell'utente.
  5. Se la risposta dal server RoR è buona, il server webapp2 risponde alla chiamata AJAX del browser (nel passaggio 2) con un cookie che indica che questo utente è ora connesso. La sessione deve contenere i ruoli dell'utente.
  6. Le richieste successive al server webapp includeranno il cookie in modo che il server possa rispondere in base ai ruoli dell'utente.