noviembre 23, 2020

Si bien el funcionamiento es similar a la v11, se utiliza la librería Azure.Storage.Blobs de código abierto en lugar del paquete WindowsAzure.Storage:

AccountSasBuilder sasBuilder = new AccountSasBuilder()
{
    Services = AccountSasServices.Blobs | AccountSasServices.Files,
    ResourceTypes = AccountSasResourceTypes.All,
    ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
    Protocol = SasProtocol.Https
};

sasBuilder.SetPermissions(AccountSasPermissions.Read); // | AccountSasPermissions.Write

StorageSharedKeyCredential key = new StorageSharedKeyCredential("MiNombreDeCuenta","MiClaveDeCuenta"));

// Generar a partir de la clave de acceso, el token SAS:
string sasToken = sasBuilder.ToSasQueryParameters(key).ToString();

// Generar la dirección URL completa incluyendo el token SAS:
UriBuilder fullUri = new UriBuilder()
{
    Scheme = "https",
    Host = string.Format("{0}.blob.core.windows.net", CloudConfigurationManager.GetSetting("accountName")),
    Path = string.Format("{0}/{1}", nombreContainer, nombreArchivo),
    Query = sasToken
};
				
Response.Redirect(fullUri.Uri)

De este modo mantenemos de forma más segura el acceso a ficheros dentro de containers con control de tiempo de expiración y permisos de usuario.