Een SAS voor gebruikersdelegering maken voor een blob met .NET
Met een Shared Access Signature (SAS) kunt u beperkte toegang verlenen tot containers en blobs in uw opslagaccount. Wanneer u een SAS maakt, geeft u de beperkingen op, waaronder welke Azure Storage-resources een client mag openen, welke machtigingen ze hebben voor deze resources en hoe lang de SAS geldig is.
Elke SAS is ondertekend met een sleutel. U kunt een SAS op twee manieren ondertekenen:
- Met een sleutel die is gemaakt met behulp van Microsoft Entra-referenties. Een SAS die is ondertekend met Microsoft Entra-referenties is een SAS voor gebruikersdelegatie . Aan een client die een SAS voor gebruikersdelegering maakt, moet een Azure RBAC-rol worden toegewezen die de actie Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey bevat. Zie Een SAS voor gebruikersdelegatie maken voor meer informatie.
- Met de sleutel van het opslagaccount. Zowel een service-SAS als een account-SAS zijn ondertekend met de sleutel van het opslagaccount. De client die een service-SAS maakt, moet directe toegang hebben tot de accountsleutel of de machtiging Microsoft.Storage/storageAccounts/listkeys/action toewijzen. Zie Een service-SAS maken of Een account-SAS maken voor meer informatie.
Notitie
Een SAS voor gebruikersdelegering biedt superieure beveiliging voor een SAS die is ondertekend met de sleutel van het opslagaccount. Microsoft raadt het gebruik van een SAS voor gebruikersdelegering aan, indien mogelijk. Zie Beperkte toegang verlenen tot gegevens met Shared Access Signatures (SAS) voor meer informatie.
In dit artikel wordt beschreven hoe u Microsoft Entra-referenties gebruikt om een SAS voor gebruikersdelegering te maken voor een blob met behulp van de Azure Storage-clientbibliotheek voor .NET.
Over de SAS voor gebruikersdelegatie
Een SAS-token voor toegang tot een container of blob kan worden beveiligd met behulp van Microsoft Entra-referenties of een accountsleutel. Een SAS die is beveiligd met Microsoft Entra-referenties wordt een SAS voor gebruikersdelegatie genoemd, omdat het OAuth 2.0-token dat wordt gebruikt om de SAS te ondertekenen namens de gebruiker wordt aangevraagd.
Microsoft raadt u aan microsoft Entra-referenties te gebruiken als best practice voor beveiliging, in plaats van de accountsleutel te gebruiken, die gemakkelijker kan worden aangetast. Wanneer voor uw toepassingsontwerp handtekeningen voor gedeelde toegang zijn vereist, gebruikt u Microsoft Entra-referenties om een SAS voor gebruikersdelegatie te maken voor superieure beveiliging. Zie Een SAS voor gebruikersdelegatie maken voor meer informatie over de SAS voor gebruikersdelegatie.
Let op
Elke client die een geldige SAS heeft, heeft toegang tot gegevens in uw opslagaccount, zoals toegestaan door die SAS. Het is belangrijk om een SAS te beschermen tegen schadelijk of onbedoeld gebruik. Gebruik discretie bij het distribueren van een SAS en een plan voor het intrekken van een gecompromitteerde SAS.
Zie Beperkte toegang verlenen tot Azure Storage-resources met behulp van Sas (Shared Access Signatures ) voor meer informatie over handtekeningen voor gedeelde toegang.
Azure-rollen toewijzen voor toegang tot gegevens
Wanneer een Microsoft Entra-beveiligingsprincipaal probeert toegang te krijgen tot blobgegevens, moet die beveiligingsprincipaal machtigingen hebben voor de resource. Of de beveiligingsprincipaal een beheerde identiteit is in Azure of een Microsoft Entra-gebruikersaccount dat code uitvoert in de ontwikkelomgeving, de beveiligingsprincipaal moet een Azure-rol worden toegewezen die toegang verleent tot blobgegevens. Zie Een Azure-rol toewijzen voor toegang tot blobgegevens voor informatie over het toewijzen van machtigingen via Azure RBAC.
Uw project instellen
Als u wilt werken met de codevoorbeelden in dit artikel, volgt u deze stappen om uw project in te stellen.
Pakketten installeren
Installeer de volgende pakketten:
dotnet add package Azure.Identity
dotnet add package Azure.Storage.Blobs
De app-code instellen
Voeg de volgende using
-instructies toe:
using Azure;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.Sas;
Een geverifieerde tokenreferentie ophalen
Als u een tokenreferentie wilt ophalen die door uw code kan worden gebruikt om aanvragen voor Blob Storage te autoriseren, maakt u een exemplaar van de klasse DefaultAzureCredential . Zie de Azure Identity-clientbibliotheek voor .NET voor meer informatie over het gebruik van de klasse DefaultAzureCredential om een beheerde identiteit te autoriseren voor toegang tot Blob Storage.
In het volgende codefragment ziet u hoe u de geverifieerde tokenreferentie kunt ophalen en deze kunt gebruiken om een serviceclient voor Blob Storage te maken:
// Construct the blob endpoint from the account name.
string endpoint = $"https://{accountName}.blob.core.windows.net";
// Create a blob service client object using DefaultAzureCredential
BlobServiceClient blobServiceClient = new BlobServiceClient(
new Uri(endpoint),
new DefaultAzureCredential());
Zie .NET-toepassingen verifiëren met Azure-services voor meer informatie over het autoriseren van toegang tot Blob Storage vanuit uw toepassingen met de .NET SDK.
De gebruikersdelegeringssleutel ophalen
Elke SAS is ondertekend met een sleutel. Als u een SAS voor gebruikersdelegering wilt maken, moet u eerst een gebruikersdelegeringssleutel aanvragen, die vervolgens wordt gebruikt om de SAS te ondertekenen. De gebruikersdelegatiesleutel is vergelijkbaar met de accountsleutel die wordt gebruikt voor het ondertekenen van een service-SAS of een account-SAS, behalve dat deze afhankelijk is van uw Microsoft Entra-referenties. Wanneer een client een gebruikersdelegeringssleutel aanvraagt met behulp van een OAuth 2.0-token, retourneert Blob Storage de gebruikersdelegeringssleutel namens de gebruiker.
Zodra u de gebruikersdelegeringssleutel hebt, kunt u die sleutel gebruiken om een willekeurig aantal shared access signatures voor gebruikersdelegering te maken gedurende de levensduur van de sleutel. De gebruikersdelegeringssleutel is onafhankelijk van het OAuth 2.0-token dat wordt gebruikt om het te verkrijgen, zodat het token niet hoeft te worden vernieuwd als de sleutel nog steeds geldig is. U kunt opgeven hoe lang de sleutel geldig blijft, maximaal zeven dagen.
Gebruik een van de volgende methoden om de gebruikersdelegeringssleutel aan te vragen:
In het volgende codevoorbeeld ziet u hoe u de gebruikersdelegeringssleutel aanvraagt:
public static async Task<UserDelegationKey> RequestUserDelegationKey(
BlobServiceClient blobServiceClient)
{
// Get a user delegation key for the Blob service that's valid for 1 day
UserDelegationKey userDelegationKey =
await blobServiceClient.GetUserDelegationKeyAsync(
DateTimeOffset.UtcNow,
DateTimeOffset.UtcNow.AddDays(1));
return userDelegationKey;
}
Een SAS voor gebruikersdelegering maken voor een blob
Zodra u de gebruikersdelegeringssleutel hebt verkregen, kunt u een SAS voor gebruikersdelegering maken om beperkte toegang tot een blobresource te delegeren. In het volgende codevoorbeeld ziet u hoe u een SAS voor gebruikersdelegatie voor een blob maakt:
public static async Task<Uri> CreateUserDelegationSASBlob(
BlobClient blobClient,
UserDelegationKey userDelegationKey)
{
// Create a SAS token for the blob resource that's also valid for 1 day
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = blobClient.BlobContainerName,
BlobName = blobClient.Name,
Resource = "b",
StartsOn = DateTimeOffset.UtcNow,
ExpiresOn = DateTimeOffset.UtcNow.AddDays(1)
};
// Specify the necessary permissions
sasBuilder.SetPermissions(BlobSasPermissions.Read | BlobSasPermissions.Write);
// Add the SAS token to the blob URI
BlobUriBuilder uriBuilder = new BlobUriBuilder(blobClient.Uri)
{
// Specify the user delegation key
Sas = sasBuilder.ToSasQueryParameters(
userDelegationKey,
blobClient
.GetParentBlobContainerClient()
.GetParentBlobServiceClient().AccountName)
};
return uriBuilder.ToUri();
}
Een SAS voor gebruikersdelegering gebruiken om een clientobject te autoriseren
In het volgende codevoorbeeld ziet u hoe u de SAS voor gebruikersdelegatie gebruikt om een BlobClient-object te autoriseren. Dit clientobject kan worden gebruikt om bewerkingen uit te voeren op de blobresource op basis van de machtigingen die zijn verleend door de SAS.
// Create a Uri object with a user delegation SAS appended
BlobClient blobClient = blobServiceClient
.GetBlobContainerClient("sample-container")
.GetBlobClient("sample-blob.txt");
Uri blobSASURI = await CreateUserDelegationSASBlob(blobClient, userDelegationKey);
// Create a blob client object with SAS authorization
BlobClient blobClientSAS = new BlobClient(blobSASURI);
Resources
Zie de volgende resources voor meer informatie over het maken van een SAS voor gebruikersdelegering met behulp van de Azure Blob Storage-clientbibliotheek voor .NET.
REST API-bewerkingen
De Azure SDK voor .NET bevat bibliotheken die zijn gebaseerd op de Azure REST API, zodat u kunt communiceren met REST API-bewerkingen via bekende .NET-paradigma's. De clientbibliotheekmethode voor het ophalen van een gebruikersdelegatiesleutel maakt gebruik van de volgende REST API-bewerkingen:
- Sleutel voor gebruikersdelegering ophalen (REST API)
Clientbibliotheekbronnen
Zie ook
- Beperkte toegang verlenen tot Azure Storage-resources door middel van een SAS
- Een SAS voor gebruikersdelegatie maken
Gerelateerde inhoud
- Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor .NET. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Uw .NET-app bouwen voor meer informatie.