Questa non è una risposta su come programmarlo da solo, quindi mi scuso se non mi risulta utile, ma una cosa che mi ha perforato ripetutamente da persone specializzate nella risoluzione di problemi come questo è Chiedi a qualcun altro di farlo . Hai ragione, l'implementazione più semplice possibile non è sicura. Tutte le cose specifiche che devi fare per renderlo sicuro sono un'intera applicazione, forse un'intera carriera, in se stesse. Se il tuo progetto è quello di creare un'applicazione web, allora sei probabilmente bravo a creare applicazioni web, e questo è quello che ti piacerebbe fare, quindi perché non lasciare che qualcuno a cui piace fare un'autenticazione sicura si prenda cura di questa parte per te, quindi puoi tornare a lavorare sulla tua logica di applicazione?
La mia comprensione è che questo è uno dei motivi principali per cui sono state inventate le JWT - per facilitare lo scaricamento dell'autenticazione a terzi. La tua app presenta il meccanismo per l'utente di inviare in modo sicuro le informazioni di autenticazione al proprio server ben protetto; il server di terze parti quindi fa tutto il lavoro e restituisce il token che il tuo sito prende per significare "questo utente è autenticato". In questo modo, non devi preoccuparti di proteggere i segreti degli utenti da minacce esterne e non devi preoccuparti (tanto) di ogni possibile errore di sicurezza nel tuo codice che potrebbe compromettere la tua stessa applicazione. La specializzazione è una delle parti più importanti di una società altamente industrializzata: non ti senti obbligato a installare il cablaggio nel tuo datacenter, o anche a possedere e mantenere i tuoi server fisici, perché sei interessato a scrivere applicazioni web . Dovresti forse considerare di adottare lo stesso approccio all'autenticazione.
EDIT: Potrei aver frainteso: se con "chiamare le rotte API" in realtà intendevi interagire con uno di questi fornitori di autenticazione di terze parti, il mio consiglio è totalmente ridondante. Anche così, non riesco a immaginare alcun provider di autenticazione (o la loro API o il modulo che forniscono per integrare il loro servizio nella tua app) inviando qualcosa in chiaro. L'idea è che loro si assumano la responsabilità dei segreti degli utenti. Il loro compito è rendere il loro servizio il più semplice e sicuro possibile per te e i tuoi utenti.