Ho implementato il mio schema di autenticazione e autorizzazione JSON Web Tokens, basato su tre token: token di accesso, token di riferimento e token di aggiornamento. Sono generati dal back-end o dal codice dell'applicazione e tutta la logica di autorizzazione è implementata nel middleware (nel codice Lua incorporato in nginx).
Queste sono alcune domande che mi infastidiscono:
- Dovrei firmare il mio token di riferimento con RSA prima di passarlo al client?
- Dovrei firmare il mio token di aggiornamento con RSA? Ovviamente, come il token di riferimento, non memorizza alcuna informazione critica e quindi non ne sono sicuro.
- Devo firmare il mio token di accesso con RSA, se non viene mai passato al client e viene utilizzato solo sul lato server? Immagino, dovrei, proprio come nel caso delle password hash memorizzate nel database.
- Quali sono le convenzioni di denominazione per l'intestazione HTTP in cui passo il mio token di riferimento dal server al client? Va bene usare solo un'intestazione arbitraria come
X-Reference-Token
? - In quale intestazione dovrei passare il token di riferimento dal client al lato server? Dovrei usare
Authorization: Bearer ...
(sembra una convenzione standard) o è giusto usare lo stessoX-Reference-Token: ...
- È sicuro (suppongo, non) di passare il token di aggiornamento al client. E se no, come lo memorizzano? Il token di riferimento è archiviato nei cookie lato client e passato con ogni richiesta dal client al server, il token di accesso non viene mai passato al client e viene memorizzato nella cache lato server e dove dovrei memorizzare il mio token di aggiornamento?
- È sicuro utilizzare il valore di token di riferimento non elaborato come chiave, con cui ottengo il token di accesso dalla cache lato server? Diciamo che il mio token di riferimento è solo un GUID, è abbastanza sicuro da usare questo stesso GUID come chiave con cui è memorizzato il mio token di accesso? O è più sicuro ottenere questa chiave dal GUID di alcune trasformazioni?