È un'implementazione di un meccanismo stateful per l'autenticazione dell'API resto?

1

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)

    
posta Mik378 29.11.2013 - 15:21
fonte

1 risposta

4

If I understand, this is stateful since a call to a secured API required actually two calls

Questo è stato perché l'informazione "utente X è stato autenticato al tempo T" è mantenuta sul lato server.

Of course, user would have to sent each time its credentials (or API key)

Un utente può anche firmare ogni richiesta per attestare la sua identità, dimostrando così al server che può accedere ad alcune chiavi private.

    
risposta data 29.11.2013 - 17:01
fonte

Leggi altre domande sui tag