La specifica JWT descrive solo il payload e il modo in cui viene inviato, ma lascia aperto il protocollo di autenticazione, che consente la flessibilità, ma sfortunatamente, la flessibilità può portare a antipattern e errori di progettazione.
Sto cercando alcuni schemi aziendali ben ponderati e testati per l'autenticazione JWT, che potrei usare o adattare, ma non sono riuscito a trovare qualcosa di completo.
Quello a cui stavo pensando è:
- quando non viene soddisfatta alcuna intestazione di autorizzazione o il token JWT non è valido o è scaduto, inviare HTTP 401
- per autenticare, utilizzare / accedere al canale REST, inviare nome utente e password come oggetto JSON
- per mantenere attivo il token, utilizzare il canale REST / keepalive, chiamarlo ogni N (5) minuti, ricevere il nuovo token JWT e sostituire quello esistente dopo ogni chiamata (il token scade dopo M (15) minuti)
Tuttavia, ciò che mi disturba è la necessità di quel canale / keepalive. D'altra parte, mi costringe a impedire che l'autenticazione scada, anche se l'utente è assente (la decisione, se vorremmo che keepalive non sia ancora soddisfatta) e, naturalmente, si tratta di chiamate extra e complicazioni extra al protocollo. Ciò che sarebbe interessante è che quel server prolunga automaticamente il token. In un ambiente basato sulla sessione, ripristina il timestamp, qui, tuttavia, il server dovrebbe inviare un nuovo token, forse non ogni volta, ma una volta che il token scadrà tra R (diciamo, 10) minuti. Metterlo nel corpo della risposta significherebbe modificare il protocollo di risposta JSON (quindi la soluzione è invasiva e non trasparente) e inserire un'intestazione HTTP aggiuntiva che il client potrebbe elaborare non potrebbe essere necessariamente un buon modello. IO'
Ci sono schemi aziendali pronti che rispondono ai miei punti in sospeso? La mia bozza di protocollo è un'idea affidabile? Preferirei usare qualcosa di pronto rispetto al design da zero.