AUTENTICAZIONE E AUTORIZZAZIONE

AGGIUNGERE UN CLAIM PERSONALIZZATO PER EVITARE CHIAMATE AL DATABASE

NET CORENei casi in cui l’applicazione venga fruita da molti utenti contemporaneamente ci sono tecniche alternative nell’inviare query alla tabella AspNetUsers. Vediamo dove possiamo aggiungere un claim per ricavare il FullName. Questo perché il FullName lo ricaviamo dallo UserManager<TUser> e ogni volta che ci spostiamo nelle pagine dell’applicazione viene fatta una query al database. Ci può essere un piccolo decadimento delle prestazioni se l’applicazione è fruita da molti utenti contemporaneamente. 

Cookie

Aggiungiamo nel cookie di autenticazione anche il FullName che, una volta autenticato l’utente con la pagina di login, viaggerà insieme alle richieste nell’applicazione. Vediamo la classe da cui derivare.

Claim

Questo è il codice.

Codice
Registrare la classe
User e Claim

ACCEDERE AI CLAIM DELL’UTENTE CON IL SERVIZIO IHTTP CONTEXT ACCESSOR

Vediamo come accedere ai claim nei servizi.

User

CREARE UNA RELAZIONE CON APPLICATION USER

Creiamo una relazione tra AspNetUsers e Courses. Questo ci sarà molto utile quando dovremo determinare se l’utente corrente ha il diritto o meno di modificare un certo corso. Aggiungiamo una nuova colonna nella tabella Courses AuthorId chiave esterna che punta al campo Id di AspNetUsers. La relazione è uno-a-molti un autore può creare molti corsi.

Relazione corsi autori

Su AuthorId mettiamo il vincolo di chiave esterna è una relazione uno a molti, un autore può creare più corsi, infatti, ci possono essere n entry su tale colonna valorizzati con L’Id della tabella AspNetUsers come già detto.

Code

INVIARE UN’EMAIL PER LA CONFERMA DELLA REGISTRAZIONE

Anche per inviare un’e-mail l’architettura di Identity ci viene incontro, quello che dobbiamo fare noi è creare un servizio infrastrutturale che ci consente, appoggiandoci alle interfacce di Identity, di creare il codice per l’invio. L’interfaccia di registrazione si presta un po’ ad abusi, questo perché se l’utente fosse malintenzionato potrebbe indicare una e-mail non sua.

Conferma email

Il Form di registrazione invia una mail all’indirizzo specificato, fino a che l’utente non lo conferma facendo click sul link l’account risulta bloccato, non utilizzabile. Il link rimanda all’applicazione e solo dopo averlo cliccato avviene la conferma della e-mail e l’utente facendo il login ottiene il cookie di autenticazione.

Conferma

Il Client di posta scelto è Mail Kit, un progetto open source disponibile su GitHub.

Invio email con MailKit

USARE ADO.NET CON IDENTITY

Usare Entity Framework Core non è l’unica soluzione possibile, Identity è modulare e debolmente accoppiato con una particolare implementazione.

Stack Identity

Quello che faremo per implementare ADO.NET è la sostituzione dei servizi infrastrutturali.

Servizi infrastrutturali

AdoNetUserStore fa da ponte tra lo UserManager<TUser> e il nostro SqliteDatabaseAccessor.

Ado.Net User Store
Interfacce opzionali
Interfacce opzionali

LINK AL CODICE SU GITHUB

GITHUB

Scaricare il codice della sezione17 oppure il ramo master o clonare il repository GITHUB per avere a disposizione tutte le sezioni nel tuo editor preferito. Consulta il file README.md per reperire user e password per inviare e-mail con mailtrap.io. Inoltre devi reperire i codici per implementare il ReCaptcha. Sotto ti riporto un’immagine dal sito di Google.

Recaptcha