Saltar al contenido

¿Cómo obtener una firma de acceso compartido en un blob con la última versión de Azure SDK .NET API v12?

Eduardo, parte de este gran staff, nos ha hecho el favor de crear este post porque conoce muy bien dicho tema.

Solución:

La respuesta de Sajeetharan me hizo buscar una clase BlobSasBuilder, que en realidad existe.

Así es como puedo construir uno en el servidor:

//  Creates a client to the BlobService using the connection string.
var blobServiceClient = new BlobServiceClient(storageConnectionString);

//  Gets a reference to the container.
var blobContainerClient = blobServiceClient.GetBlobContainerClient();

//  Gets a reference to the blob in the container
BlobClient blobClient = containerClient.GetBlobClient();

//  Defines the resource being accessed and for how long the access is allowed.
var blobSasBuilder = new BlobSasBuilder

    StartsOn = DateTime.UtcNow.Subtract(clockSkew), 
    ExpiresOn = DateTime.UtcNow.Add(accessDuration) + clockSkew,
    BlobContainerName = ,
    BlobName = ,
;
    
//  Defines the type of permission.
blobSasBuilder.SetPermissions(BlobSasPermissions.Write);
       
//  Builds an instance of StorageSharedKeyCredential      
var storageSharedKeyCredential = new StorageSharedKeyCredential(, );

//  Builds the Sas URI.
BlobSasQueryParameters sasQueryParameters = blobSasBuilder.ToSasQueryParameters(storageSharedKeyCredential);

Aquí está cómo usarlo en el lado del cliente:

//  Builds the URI to the blob storage.
UriBuilder fullUri = new UriBuilder()

    Scheme = "https",
    Host = string.Format("0.blob.core.windows.net", ),
    Path = string.Format("0/1", , ),
    Query = sasQueryParameters.ToString()
;

//  Get an instance of BlobClient using the URI.
var blobClient = new BlobClient(fullUri.Uri, null);

//  Upload stuff in the blob.
await blobClient.UploadAsync(stream);

Apéndice

Como mencionó @one2012 en los comentarios, unos meses después de esta respuesta se publicó una página que muestra todas las funciones que se encuentran en los espacios de nombres de Azure.Storage. El enlace puede ser útil para obtener más información.

Después de una buena cantidad de búsqueda, encontré documentación de Microsoft sobre esto: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-user-delegation-sas-create-dotnet

Esto detalla el uso de una delegación de usuarios key para generar el SAS en lugar de la cuenta key pero el cambio es solo una sobrecarga diferente a .ToSasQueryParameters() como se describe en otras respuestas.

Algunos key fragmentos del artículo para conectar esto. Primero crea tu BlobServiceClient:

// Construct the blob endpoint from the account name.
string blobEndpoint = string.Format("https://0.blob.core.windows.net", accountName);

// Create a new Blob service client with Azure AD credentials.
BlobServiceClient blobClient = new BlobServiceClient(new Uri(blobEndpoint),
                                                     new DefaultAzureCredential());

Obtener la delegación de usuarios key, esto se utilizará para generar el SAS:

// Get a user delegation key for the Blob service that's valid for seven days.
// You can use the key to generate any number of shared access signatures over the lifetime of the key.
UserDelegationKey key = await blobClient.GetUserDelegationKeyAsync(DateTimeOffset.UtcNow,
                                                                   DateTimeOffset.UtcNow.AddDays(7));

Finalmente cree el URI de SAS:

// Create a SAS token that's valid for one hour.
BlobSasBuilder sasBuilder = new BlobSasBuilder()

    BlobContainerName = containerName,
    BlobName = blobName,
    Resource = "b",
    StartsOn = DateTimeOffset.UtcNow,
    ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
;

// Specify read permissions for the SAS.
sasBuilder.SetPermissions(BlobSasPermissions.Read);

// Use the key to get the SAS token.
string sasToken = sasBuilder.ToSasQueryParameters(key, accountName).ToString();

// Construct the full URI, including the SAS token.
UriBuilder fullUri = new UriBuilder()

    Scheme = "https",
    Host = string.Format("0.blob.core.windows.net", accountName),
    Path = string.Format("0/1", containerName, blobName),
    Query = sasToken
;

Si posees algún rompecabezas o forma de ascender nuestro reseña eres capaz de dejar una explicación y con placer lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *