Sto costruendo un'API RESTful che utilizza i token JWT per l'autenticazione dell'utente (emessa da un login
endpoint e inviata successivamente in tutte le intestazioni) e i token devono essere aggiornati dopo un periodo di tempo prestabilito (richiamando una renew
endpoint, che restituisce un token rinnovato).
È possibile che la sessione API di un utente non sia più valida prima che il token scada, quindi tutti i miei endpoint iniziano verificando che: 1) il token è ancora valido e 2) la sessione dell'utente è ancora valida. Non c'è modo di invalidare direttamente il token, perché i client lo memorizzano localmente.
Quindi tutti i miei endpoint devono segnalare ai miei clienti due possibili condizioni: 1) che è il momento di rinnovare il token o 2) che la sessione è diventata non valida e che non sono più autorizzati ad accedere al sistema. Posso pensare a due alternative per i miei endpoint per segnalare ai loro clienti quando si verifica una delle due condizioni (supponiamo che i client possano essere adattati a entrambe le opzioni):
- Restituisce un codice http 401 (non autorizzato) se la sessione è diventata non valida o restituisce un codice 412 (precondizione non riuscita) quando il token è scaduto ed è ora di chiamare l'endpoint
renew
, che restituirà un 200 (ok) codice. - Restituisce 401 per segnalare che la sessione non è valida o il token è scaduto. In questo caso il client chiamerà immediatamente l'endpoint
renew
, se restituisce 200 allora il token viene aggiornato, ma serenew
restituisce anche 401 significa che il client è fuori dal sistema.
Quale delle due alternative sopra suggeriresti? Quale sarebbe più standard, più semplice da capire e / o più RESTful? O consiglieresti un approccio completamente diverso? Vedi qualche ovvio problema o rischio per la sicurezza con entrambe le opzioni? Punti extra se la tua risposta include riferimenti esterni che supportano la tua opinione.
Aggiorna
Ragazzi, concentratevi sulla vera domanda - quale delle due alternative del codice http per segnalare un annullamento di rinnovo / sessione è la migliore? Non importa che il mio sistema utilizzi JWT e sessioni lato server, questa è una peculiarità della mia API per regole di business molto specifiche, e non la parte per cui sto cercando aiuto;)