Scenario
Un cliente si trova ad affrontare un problema con i suoi utenti: utilizzano un servizio (web) alcune volte all'anno e dimenticano le proprie credenziali molto spesso . Esiste una procedura standard di recupero della password, ma molti di loro chiamano semplicemente il servizio clienti ogni volta (chiedendo loro di generare una determinata password ). Questo ha poche implicazioni negative:
- Il personale del servizio clienti conosce tutte le password.
- Gli utenti mantengono il servizio clienti occupato (e quando non è orario di lavoro queste chiamate sono costose per il cliente).
Nota che:
- Gli utenti possono cambiare le proprie credenziali in qualcosa di significativo, ma semplicemente non gli interessa perché usano questo servizio solo due o tre volte all'anno, quindi vogliono ottenere le cose nel modo più rapido possibile.
- Aggiungere una casella di controllo "ricordami" non è un'opzione perché è (in questo caso) vietato dalla legge.
- Il sito memorizza informazioni mediche molto delicate.
- Il cliente vuole risparmiare denaro, quindi i dispositivi hardware (come lettori di smart card e / o lettori di impronte digitali) non sono un'opzione.
Domanda
Per risolvere questi problemi il cliente mi chiede di generare un ID univoco per ciascun utente, questo ID può essere aggiunto all'URL per autenticare automaticamente quell'utente. Ad esempio:
Gli utenti possono decidere di salvare questo ID dove preferiscono (link sul desktop, preferiti del browser, annotarlo su un post-it) ma il cliente stesso non è responsabile per questo (ricorda che non possiamo fornire un "ricordami "funzionalità a causa della legge).
Non sto parlando di un token di autenticazione (memorizzato come cookie al posto di username e password tuple, come discusso Perché usare un token di autenticazione al posto del nome utente / password per richiesta? ) ma un parametro URL.
Supponendo che:
- Questo token generato automaticamente è abbastanza lungo (diciamo 30 ~ 60 caratteri) e casuale casuale (stringa alfanumerica con caratteri maiuscoli).
- Vengono utilizzate misure di sicurezza di base (ritardi molto lunghi per i token sconosciuti e la blacklist IP).
- Conserverei questi ID separatamente dalle credenziali normal , hashed (ovviamente) e con un algoritmo / parametri diversi dalle password (a causa della sua lunghezza potrebbe anche essere più semplice o ho ancora bisogno di bcrypt?!)
- Il parametro viene rimosso dall'URL dopo l'autenticazione e l'utente viene reindirizzato.
C'è qualche altro problema di sicurezza che non immagino? Questo rende l'autenticazione troppo debole?
I possibili problemi a cui posso pensare sono che gli URL sono memorizzati nella cronologia del browser ...
Modifica
Un po 'più di contesto: il cliente manterrebbe la propria lista di token fissi (non modificabili) associati agli utenti. Appena prima di usare il suo servizio, invierebbe a tutti loro un'e-mail con il link indicato (e-mail e-mail generate in gruppo). Nel mio esempio il protocollo è HTTP ma in realtà è HTTPS (anche se non ho alcun controllo su questo).
Domanda aggiuntiva: l'aiuto temporaneo per questo token? Ogni volta che viene inviata una nuova e-mail, viene generato un nuovo token (con una scadenza relativamente breve, una o due settimane).