Azure Blob Storage è un servizio di archiviazione scalabile per oggetti, che consente di memorizzare grandi quantità di dati non strutturati, come documenti, immagini e file multimediali. Per garantire un accesso sicuro e controllato a questi dati, Azure offre le Shared Access Signatures (SAS), token che definiscono le autorizzazioni e la durata dell'accesso.
Una User Delegation SAS è un tipo di SAS firmata utilizzando le credenziali di Microsoft Entra ID, offrendo una sicurezza superiore rispetto alle SAS firmate con la chiave dell'account di archiviazione. Questo approccio riduce il rischio associato alla gestione diretta delle chiavi dell'account, poiché l'integrazione con le Managed Identities di Azure consente un'autenticazione sicura e senza necessità di memorizzare secrets. Le Managed Identities forniscono credenziali gestite automaticamente da Azure, migliorando la sicurezza e semplificando la gestione degli accessi alle risorse. Affinché tutto funzioni correttamente, l'utente dello sviluppatore utilizzato in Visual Studio o Visual Studio Code, oppure l'utenza dell'app su Azure (user o system identity), deve avere almeno il ruolo Storage Blob Data Reader a livello di account e di container.
Per creare una User Delegation SAS in .NET, prima di tutto assicuriamoci di avere i pacchetti Azure.Identity e Azure.Storage.Blobs installati nel progetto. Il primo passo è quello di ottnere una chiave di firma temporanea sulla base dell'utente impersonificato dall'app. Utilizziamo quindi prima DefaultAzureCredential e otteniamo poi la chiave per un lungo periodo, anche di un giorno.
var credential = new DefaultAzureCredential();
var blobServiceClient = new BlobServiceClient(new Uri($"https://{accountName}.blob.core.windows.net"), credential);
var userDelegationKey = await blobServiceClient.GetUserDelegationKeyAsync(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddDays(1)); L'idea è che questa chiave venga messa in cache in modo da tenerla disponibile e poter firmare velocemente i SAS.
Ottenuta la chiave (sul momento o dalla cache) possiamo procedere alla creazione della firma. Nell'esempio seguente diamo l'accesso all'interno container per un'ora.
var sasBuilder = new BlobSasBuilder
{
BlobContainerName = containerName,
Resource = "c", // "b" per un blob specifico
StartsOn = DateTimeOffset.UtcNow,
ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
};
sasBuilder.SetPermissions(BlobContainerSasPermissions.Read | BlobContainerSasPermissions.Write);
var sasToken = sasBuilder.ToSasQueryParameters(userDelegationKey, accountName).ToString();
var sasUri = new Uri($"{blobServiceClient.Uri}/{containerName}?{sasToken}"); Implementando questi passaggi, possiamo generare una User Delegation SAS in .NET, garantendo un accesso sicuro e controllato alle risorse di Azure Blob Storage senza esporre le chiavi dell'account.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Integrare LLM alle nostre applicazioni in .NET con MCP
Creare comandi nella dashboard .NET Aspire
Utilizzare le librerie native di .NET per comprimere uno o più file in formato ZIP
Creare una file based app con C#
Effettuare chiamate API tramite GitHub App
Enterprise Live Migrations - Migrare da Azure DevOps a GitHub
Ciclo di vita risorse con .NET Aspire
Response streaming con Blazor e .NET 10
Breaking the Legacy Barrier: how to Use AI to Modernize Applications
Referenziare un package NuGet in una file based app .NET
Creare una toolbox condivisa per gli agenti in Microsoft Foundry
Nuove validazioni Form Blazor
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Utilizzare un DataContext specifico per la modalità design time di Blend e Visual Studio nei controlli Silverlight
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Esaminare documenti con namespace con LINQ e XDocument
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE


