In molti articoli sulle migliori pratiche dell'API di Rest, si raccomanda di non dipendere dalle sessioni sul lato server poiché porta a un meccanismo di stato.
Attualmente utilizzo il framework Play 2.2, con un meccanismo che memorizza i dati dell'utente connesso nella cache di riproduzione (temporaneamente persistente).
Quando l'utente vuole autenticare, chiama un'API dedicata che acquisisce le sue credenziali e, se valido, il server genera un cookie che gli verrà inviato. Questo cookie contiene un ID di riferimento dei dati dell'utente nella cache di Play.
Quindi, ogni volta che un utente chiama un'API che richiede l'autenticazione dell'utente, il server acquisisce il cookie dell'utente (se presente), richiede la cache e controlla se l'utente è già autenticato correttamente per quanto riguarda la durata della convalida.
Ecco un piccolo esempio:
def myApi = userAuthenticatorRequest.securedAction { //user has to be already logged in
implicit request =>
//do something
}
Devo lasciare questa soluzione per essere conforme alle migliori pratiche o dovrei tenerlo? E 'davvero considerato come un meccanismo di stato? Se capisco, questo è stato dato che una chiamata a un'API protetta richiedeva effettivamente due chiamate:
- autenticazione api
- secure api
mentre uno stateless autentica l'utente direttamente nell'API protetta e quindi sarebbe totalmente indipendente da qualsiasi contesto. Ovviamente, l'utente dovrebbe inviare ogni volta le sue credenziali (o la chiave API)