Sto creando un'API RESTful che utilizza i token JWT per l'autenticazione dell'utente (emessi da un login
endpoint e successivamente inviati in tutte le intestazioni) e i token devono essere aggiornati dopo un determinato periodo di tempo (invocando un renew
endpoint, che restituisce un token rinnovato ).
È possibile che la sessione API di un utente diventi non valida prima della scadenza del token, quindi tutti i miei endpoint iniziano verificando che: 1) il token sia ancora valido e 2) la sessione dell'utente sia ancora valida. Non è possibile invalidare direttamente il token, poiché i client lo memorizzano localmente.
Pertanto, tutti i miei endpoint devono segnalare ai miei clienti due possibili condizioni: 1) che è tempo di rinnovare il token o 2) che la sessione è diventata non valida e non è più consentito loro di accedere al sistema. Posso pensare a due alternative per i miei endpoint di segnalare i 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 (condizione preliminare non riuscita) quando il token è scaduto ed è tempo di chiamare l'
renew
endpoint, che restituirà un codice 200 (ok). - Restituisce 401 per segnalare che la sessione non è valida o che il token è scaduto. In questo caso il client chiamerà immediatamente l'
renew
endpoint, se restituisce 200, il token viene aggiornato, ma serenew
restituisce anche 401, significa che il client è fuori dal sistema.
Quale delle due alternative sopra mi consiglieresti? 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 a supporto della tua opinione.
AGGIORNARE
Ragazzi, concentratevi sulla vera domanda: quale delle due alternative al codice http per segnalare un rinnovo / invalidamento della sessione è la migliore? Non importa il fatto che il mio sistema utilizzi JWT e sessioni lato server, questa è una peculiarità della mia API per regole aziendali molto specifiche e non la parte per cui sto cercando aiuto;)