Estendere Asp NET Core Identity

Introduzione

Asp Net Core Identity è il framework di Microsoft per la gestione dell’autenticazione di un’applicazione Asp.Net Core.

Moreno Gentili descrive molto dettagliatamente come personalizzare Asp.Net Core Identity. Seguendo le indicazioni presenti nell’articolo, creo una classe “ApplicationUserr” che estende “IdentityUser”.

Codice della classe ApplicationUser
ApplicationUser.cs

Dati Personali

L’applicazione che stiamo sviluppando utilizza la classe “ApplicationUser” per memorizzare i dati dell’utente, ma nel caso in cui proviamo a scaricare i dati personali il nome, il cognome e l’immagine del profilo non sono presenti:

Dati personali scaricati in formato Json
Dati Personali

Per dare la possibilità all’utente di scaricare tutti i suoi dati personali, dobbiamo definire i campi che abbiamo aggiunto come tali, aggiungendo ad ognuno di essi l’attributo “[PersonalData]”.

Codice della classe ApplicationUser con l'attributo PersonalData
ApplicationUser con PersonalData Attribute

Dopo aveer eseguito questa modifica se l’utente prova nuovamente a scaricare i suoi dati personali, ottiene un file .json con tutte le informazioni richieste.

Dati personali scaricati in formato Json con i dati aggiuntivi
Dati Personali

Dopo che un utente si sarà registrato o dopo che si sarà avrà eseguito l’accesso sul nostro sito, comparirà un messaggio di benvenuto e la mail utilizzata per accedere.

Immagine profilo utente
Profilo utente

Dopo aver acquisito (Cognome, Nome, AvatarProfilo), probabilmente vorremmo visualizzare il nome dell’utente ed una thumbnail dell’avatar, tipo Facebook.

Claims Principal

Asp.Net Core utilizza i claims per memorizzare i dati dell’utente.

Un claim è una coppia “nome-valore” contenente i dati dell’utente, un’istanza di “ClaimsPrincipal” è composta da una serie di “Claims”.

Per visualizzare i dati aggiuntivi nella “View”, dobbiamo prima aggiungere un Claim contenente i dati che ci interessano a ClaimsPrincipal.

Questa operazione la possiamo eseguire definendo un servizio che implementi l’interfaccia “IUserClaimsPrincipalFactory”; dopo aver implementato il servizio dobbiamo provvedere a registrarlo.

Registrazione servizio
Registrazione Servizio

Implementazione servizio

Nell’immagine che segue viene mostrato il profilo utente predefinito e il profilo utente che si vuole visualizzare.

Profili utente a confronto
Profilo Utente

Per ottenere il risultato a destra basta aggiungere i dati che ci interessano al “ClaimsPrincipal”, nell’implementazione del servizio che è stato definito.

Codice della classe ApplicationClaimsPrincipalFactory per la registrazione del Claim personalizzato
ApplicationClaimsPrincipalFactory

Non è stata implementata l’interfaccia “IUserClaimsPrincipalFactory”, ma è stata estesa la classe “UserClaimsPrincipalFactory”, in quanto in questo modo possiamo sfruttare il comportamento standard di Asp.Net Core Identity.

Il percorso dell’immagine del profilo, il nome ed il cognome vengono aggiunti al “ClaimsPrincipal” all’interno del metodo “CreateAsync”.

Codice del metodo CreateAsync
CreateAsync

Visualizzazione

Se si vuole modificare la partial view definita da Asp.Net Core Identity bisogna agire su “_LoginPartial.cshtml”.

Percorso della partial view
_LoginPartial.cshtml

“FullName” e “Avatar” non sono due property di “ClaimPrincipal”, quindi per accedere al loro valore dobbiamo farlo attraverso la chiave.

Codice della partial view
_LoginPartial.cshtml

Suggerimenti

Nel caso in cui nelle view si voglia utilizzare un approccio “Object Oriented” possiamo definire “FullName ed Avatar” come “Extension Method”.

Codice per gli extension method relativi ai claims
Extension Method per ClaimsPrincipal

Leave a Reply

Your email address will not be published. Required fields are marked *