2010-10-05 9 views
7

Sto lavorando su un'API REST che verrà utilizzata dagli sviluppatori che scrivono app mobili. Gli utenti saranno in grado di utilizzare servizi di terze parti (Google, Twitter, ecc.) Per autenticarsi, questo è gestito principalmente da OAuth (a seconda del servizio in questione). Usiamo OAuth a 2 vie tra l'applicazione client e il server API (laddove la chiave/segreto del cliente è specifica dell'app, lo sviluppatore lo riceve dal nostro sito quando l'app è registrata lì).Come implementare un'API REST stateless

Il mio problema è come gestire per tenere traccia dell'autenticazione dell'utente in modo stateless. Non ho le credenziali dell'utente per inviare ogni richiesta. Potrei creare un session_id univoco quando un utente effettua l'accesso e quindi lo richiede in ogni richiesta all'API REST. Ci sono altre soluzioni al mio problema? L'utilizzo di un session_id univoco per identificare l'utente causa problemi da una prospettiva API REST stateless?

+2

Sto ancora digerendo questo buon articolo di John Wilander. Forse può aiutarti anche tu. http://appsandsecurity.blogspot.com/2011/04/rest-and-stateless-session-ids.html – RayLuo

risposta

10

Disclaimer: Non sono in ogni caso un esperto di sicurezza.

Non chiamarlo session_id. Chiamalo come token di autenticazione e passa l'intestazione HTTP di autorizzazione utilizzando il tuo schema di autenticazione. Vedere lo Google AuthSub per un esempio.

Non utilizzare questo token di autenticazione per scopi diversi dall'identificazione dell'utente e determinare se sono autorizzati a eseguire la richiesta. Non associare nessuno stato al token e non recuperare le preferenze dell'utente in base ad esso.

+0

Grazie per l'input – Andreas

+1

Solo per verificare la mia comprensione di ciò, il token di sessione richiede ancora lo stato della sessione sul lato server ? Ad esempio, la durata della sessione è gestita dal server e il token non è più valido dopo un timeout della sessione sul lato server? Sto cercando un modo per raggiungere un obiettivo simile senza avere il concetto di una "sessione" sul server. – Aron

+1

Questo è anche ciò che davvero non capisco. Tutti parlano di sicurezza e di apolidi, ma una sessione per l'utente deve essere tenuta sul server in ogni caso. – Gambo