2015-06-29 14 views
7

Sto usando Asp.Net Identity per generare un token di reimpostazione della password.Come ridurre la lunghezza del token di reimpostazione della password in Asp.Net Identity?

string Token = userManager.GeneratePasswordResetToken(userId); 

sopra il codice mi sta dando un token di grande lunghezza. È possibile generare un token di reimpostazione della password di breve durata?

+0

I token di reimpostazione password dovrebbero essere difficili da indovinare, pertanto, più a lungo è, meglio è. La domanda che ho è perché vuoi una lunghezza più breve? – phuzi

+3

@phuzi qui ho intenzione di utilizzare token più breve per generare un testo di collegamento e inviarlo all'indirizzo e-mail del cliente. in modo che il nostro cliente copi il testo del collegamento e lo incolli in un'altra interfaccia invece di fare clic. – sridharnetha

+0

chiamo la mia risposta qui http://stackoverflow.com/a/40961708/4251431 –

risposta

0

Il token di reimpostazione della password deve essere crittograficamente casuale: ciò significa che, dato un insieme di token utilizzati, il token successivo dovrebbe essere impossibile da indovinare. Deve anche coprire un insieme sufficientemente grande di valori possibili che la forza bruta che tenta di eseguirli tutti è in modo non corretto.

È possibile apportare modifiche per far funzionare quest'ultimo con insiemi più piccoli di valori possibili, ad esempio è possibile aggiungere un ritardo di 1 secondo alla pagina/azione di reimpostazione della password prima di controllare il token. I tuoi utenti noteranno a malapena il ritardo nella pagina usata raramente, ma gli autori di attacchi non saranno in grado di tentare rapidamente molti token.

Quindi, in primo luogo è necessario ottenere un numero casuale crittograficamente:

var random = new byte[8]; 
using (var rng = System.Security.Cryptography.RandomNumberGenerator.Create()) 
    rng.GetBytes(random); 

ho messo 8 byte qui, ma si può fare questo qualsiasi lunghezza desiderata.

Quindi è necessario trasformarlo in una bella stringa che copia-incollabile. È possibile farlo con una conversione unicode ma trovo base di 64 più affidabile:

Convert.ToBase64String(random).TrimEnd('='); 

Utilizzando questo con 8 byte vi darà 64 bit di possibili valori e di una stringa 10 char. L'utilizzo di 4 ti darà 32 bit (probabilmente abbastanza con il controllo dei token lenti su un sito a bassa sicurezza) e una stringa di 5 caratteri.

Problemi correlati