2013-04-30 24 views
7

Ho pensato di recente come ottenere correttamente il mio Webframework/stack di applicazioni. Sto passando lentamente alla scala e alla programmazione funzionale (proveniente da Python con CherryPy). Quindi è stato naturale guardare in Play poiché è il framework più ampiamente supportato (ora che anche Typesafe l'ha adottato). Sentiti libero di correggermi se mi manca qualcosa qui.Autenticazione restful (e stateless) con Play Framework e Scala

Quindi il gioco è davvero l'idea di webapp stateless e ho difficoltà a girarmi intorno in termini di autenticazione e autorizzazione. Ora dopo alcuni scavi online (The definitive guide to form-based website authentication) sono giunto alla conclusione che l'autenticazione e l'autorizzazione devono essere eseguite su ogni singola chiamata al mio backend (JSON-RPC o qualsiasi altra cosa), evitando la vecchia idea del cookie di sessione.

Ora qual è l'approccio migliore per ottenere questo con la tecnologia di oggi?

E che dire:

ho pensato a "semplice" DigestAuth come è dimostrato e diffusa, ma poi si ha questa sensazione simile al vecchio e arrugginito autenticazione di base.

Grazie!

risposta

0

Per quanto riguarda me, lo uso nel mio attuale progetto https://github.com/t2v/play20-auth, funziona correttamente.

+0

Non fa davvero riposare vero? Sembra che sia semplicemente una correzione per il cookie di autenticazione proprio non così sicuro. – AlessandroEmm

+0

@AlessandroMeyer Posso dire che è quasi riposante ma non puramente riposante, come sappiamo che il riposo significa apolidi e non possiamo mescolarlo nello stesso tempo perché "autenticato" è uno stato, ma d'altra parte può essere realizzato in strati diversi. – arussinov

+0

hai ragione, ma dover autenticare ogni volta (digest o auth di base) sarebbe veramente senza stato e mi stavo chiedendo se questo è un approccio ragionevole. – AlessandroEmm

2

È possibile ottenere facilmente una soluzione di lavoro. Ma non buono. Sembra che il vantaggio dell'apolidia rispetto allo stato non sia necessario per condividere sessioni. Facile da scalare. Tuttavia, l'autenticazione per ogni chiamata è costosa. A volte aggiungo anche alcune operazioni di lettura del database aggiuntive. Questo rallenterà la risposta. Se si desidera memorizzare nella cache il risultato dell'autenticazione, non vi sarà alcuna differenza con una soluzione di sessione stateful. Come mia opinione. Non è possibile implementare un controllo dell'accesso basato sui ruoli in modo stateless!

+0

L'accesso basato sul ruolo è un no-no nel cosiddetto "web-dev" moderno? – AlessandroEmm

+0

È possibile inserire lo stato in un motore di memoria replicabile veloce come REDIS. quindi ogni singolo processo di gioco è senza stato, il che facilita la scala orizzontale. –