Sto sviluppando alcune API REST che richiedono un HTTP basic auth
per accedere. Le API sono scritte in Django e l'auth si basa sul middleware di Django auth: controlla il DB, il nome utente e la password. La password è memorizzata con pbkdf2
.
Come puoi immaginare, ogni richiesta richiede tempo poiché colpisce il DB (anche con sondaggi e così via). Quindi, ho pensato a cache
(usando memcache) le credenziali per controllarle prima di chiedere al DB. L'idea è di ricavare una chiave basata sui dati BasicAuth inviati in modo tale da poter interrogare la cache e recuperare le informazioni utente.
Finora ho trovato idee sotto. Ho la stringa basicauth base64
e posso:
- Utilizza il valore così come è la chiave per il memcache.
- Usa un
SHA1
per cancellare la stringa base64 e usarla. - Ricava
Username:Password
e come chiave usapbkdf2(p,u,iterations)
dove crittografo la password utilizzando il nome utente come salt. Qui, devo stare attento con le iterazioni, altrimenti potrebbe richiedere troppo tempo. Empiricamente le iterazioni sono < 100 per renderlo abbastanza veloce, che suona un po 'troppo basso.
Anche se la cache è volatile ( 120s
), la soluzione migliore (in termini di trade-off tra sicurezza e velocità) è il numero 3 per me. Qualsiasi input O posso supporre che la cache sia abbastanza sicura e posso usare il numero 1 o 2 anche se sono lontani dall'essere sicuri?
Chiunque abbia una soluzione migliore / più intelligente?