Generatore di Password casuali in C# per ASP.NET Core & ASP.NET MVC Identity Una pratica classe helper in C# che può essere utilizzata per generare una password casuale con lettere maiuscole e minuscole, numeri e caratteri speciali

C# Random Password Generator for ASP.NET Core & ASP.NET MVC Identity Framework

Ieri mi sono trovato con la necessità di creare un certo numero di password casuali in C#. Prima di implementare un metodo apposito ho speso alcuni minuti cercando in giro per il web, nella speranza di trovare qualcosa di pronto da poter utilizzare. Mi sono quindi imbattuto in questo interessantissimo post del 2006 di Mads Kristensen, l’autore di numerose estensioni per Visual Studio come Web Essentials, Web Compiler, ASP.NET Core Web Templates e molte altre.

Sfortunatamente, l’esempio di codice contenuto in quell’articolo non mi ha aiutato granché, poiché non forniva alcuna garanzia che la password generata fosse dotata dei requisiti di sicurezza a me necessari: nello specifico, avevo bisogno di generare password che, oltre ad avere una lunghezza minima, contenessero almeno una lettera maiuscola, una lettera minuscola, un numero e un carattere speciale (non alfanumerico). Le password casuali generate dal metodo di Mads possono avere o meno questi requisiti, a seconda dei caratteri che vengono determinati a caso. Una limitazione non compatibile con il metodo    del namespace   , che – per impostazione predefinita – è configurato per accettare unicamente password dotate dei suddetti requisiti.

Oltre all’articolo di Mads ho trovato anche questo interessante thread su StackOverflow, dove la communty elencava una serie di possibili opzioni, tra cui:

  • Utilizzare il metodo   incluso nell’assembly   , sfortunatamente non (ancora) disponibile in ASP.NET Core.
  • Realizzare un porting ASP.NET Core del metodo sopracitato, a partire dal codice sorgente ufficiale (rilasciato su MIT license).
  • Implementare un metodo personalizzato.

Alla fine mi sono deciso a seguire la terza ipotesi, proprio come scelse di fare Mads Kristensen oltre 11 anni orsono.

Il risultato dei miei sforzi è la classe che trovate qui sotto:

Come è possibile vedere, il metodo da me realizzato accetta come parametro un oggetto di tipo PasswordOptions, definito nell’assembly Microsoft.AspNetCore.Identity: se non avete questo assembly a disposizione potete tranquillamente rimpiazzarlo con una serie di parametri (due int, quattro bool) o da una una classe POCO analoga.

Se utilizzate ASP.NET Core, è probabile che abbiate già un oggetto PasswordOptions da poter utilizzare nel metodo ConfigureService contenuto nella classe Startup del vostro progetto:

Potete quindi memorizzare questo oggetto da qualche parte (ad es. in una variabile statica dell’applicazione) e riutilizzarlo ogniqualvolta vi serva di chiamare il metodo GenerateRandomPassword di cui sopra.

UPDATE: Da qualche settimana la versione aggiornata di questa libreria è disponibile su GitHub su licenza Apache License 2.0.

Se avete bisogno di un metodo C# che controlli la “forza” (o per meglio dire il livello di sicurezza) di una o più password, potete dare un’occhiata anche a quest’altro articolo.

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.