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
Gestire i dati con Azure Cosmos DB Data Explorer
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Generare token per autenicarsi sulle API di GitHub
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare Copilot con Azure Cosmos DB
Utilizzare i primary constructor di C# per inizializzare le proprietà