Negli script #169 e #170 abbiamo visto un nuovo modo di accedere ad un'istanza di Azure SQL Database sfruttando Azure Active Directory. Abbiamo visto come dare accesso ad utenti AAD e come ottenere un access token per accedere al database senza l'ausilio di credenziali. L'approccio basato su access token ha molteplici vantaggi che trovano massima potenzialità quando utilizziamo tutto questo all'interno di un contesto Azure.
Quando creiamo una Web App o una Function, infatti, abbiamo la possibilità di accedere ad una sezione Identity nella quale possiamo scegliere di attivare il System assigned, come mostrato nella figura.
Una volta attivato viene creata un'identità del nostro App Service (nell'esempio di nome ricciolotest) che permette di equiparare l'applicativo stesso allo stesso modo di un utente. Questo significa che, una volta attivato il supporto di AAD all'interno di SQL Database, come mostrato nello script #169, possiamo dare accesso all'applicativo stesso creando un utente apposito, come nello snippet seguente.
CREATE USER [ricciolotest] FROM EXTERNAL PROVIDER; exec sp_addrolemember db_datareader, [ricciolotest]
Fatto questo possiamo pubblicare il nostro applicativo sull'App Service e, allo stesso modo dello script #170, ottenere prima un access token e poi connetterci al database usando una stringa di connessione senza credenziali. In modo molto simile a come Visual Studio fornisce un endpoint per il rilascio del token, anche all'interno di Azure gli App Service disponiamo di un endpoint locale di rilascio del token che la libreria Microsoft.Azure.Services.AppAuthentication conosce, rendendoci il tutto trasparente. Ricapitolando quindi i passi necessari sono:
- Abilitare AAD sull'istanza di SQL Server;
- Abilitare l'identità sull'applicativo di nostro interesse;
- Creare l'utenza SQL con il nome dell'applicativo stesso;
- Connetterci usando una stringa di connessione senza credenziali e ottenendo il token usando la libreria.
Facendo questo non dobbiamo più rincorrere credenziali, è più facile controllare gli applicativi che possono accedere al database e rimuoverne l'accesso, è più difficile il furto delle credenziali, ed infine possiamo sviluppare con una code base identica usando Visual Studio.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Definire stili a livello di libreria in Angular
Migrare una service connection a workload identity federation in Azure DevOps
Semplificare il deployment di siti statici con Azure Static Web App
Generare file PDF da Blazor WebAssembly con iText
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Criptare la comunicazione con mTLS in Azure Container Apps
Evitare la command injection in un workflow di GitHub
Gestire undefined e partial nelle reactive forms di Angular
Reactive form tipizzati con modellazione del FormBuilder in Angular
Utilizzare Model as a Service su Microsoft Azure
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Creare alias per tipi generici e tuple in C#