Quando dobbiamo utilizzare SQL Azure, possiamo utilizzare un token come meccanismo di autenticazione verso il database grazie a MSI. Grazie a questa funzionalità, non dobbiamo specificare username e password nella stringa di connessione, ma dobbiamo chiedere al servizio di identity un token per accedere al database in base all'identity della nostra applicazione. Questo token viene poi passato al database che lo valida e ci da accesso (previa configurazione dell'ambiente). Per un maggior approfondimento su questa tecnica rimandiamo all'articoolo di cristian civera su azure italia relativo a questo argomento.
EF Core non supporta direttamente la richiesta e la configurazione del token, ma abbiamo comunque la possibilità di recuperare il token manualmente, creare una connessione al database, configurarne il token e poi passare la connessione a EF Core che la userà per connettersi al database.
Questo processo viene gestito nello startup dell'applicazione attraverso il metodo AddDbContext.
services.AddDbContext<ApplicationDbContext>(o => { var conn = new SqlConnection("connectionstring"); conn.AccessToken = new AzureServiceTokenProvider() .GetAccessTokenAsync("https://database.windows.net/") .Result; o.UseSqlServer(conn); });
Il codice è piuttosto semplice, ma vanno sottolineate alcune cose. Innanzitutto, questa funzionalità è disponibile solo dalla versione 2.2 di .NET Core in quanto la proprietà AccessToken sull'oggetto SqlConnection è stata introdotta in questa versione. Inoltre, poichè la scadenza del token è serializzata secondo il formato americano, è importante che la culture del thread abbia come formato della data "dd/MM/YYYY" altrimenti si riceve un'eccezione a runtime per il mancato parsing della data di scadenza del token.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Utilizzare database e servizi con gli add-on di Container App
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Creare gruppi di client per Event Grid MQTT
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Aggiungere interattività lato server in Blazor 8
Limitare le richieste lato server con l'interactive routing di Blazor 8
Eseguire operazioni con timeout in React
Eseguire le GitHub Actions offline
Controllare gli accessi IP alle app con Azure Container Apps