Blob Storage File - AbsoluteUri & Permission

Di recente -durante la scrittura del post File, bytes & JSON- mi sono reso conto di non avere ancora scritto un contenuto sul blog di come condividere tramite URL un file presente su Blob Storage sfruttando il Nuget - Azure.Storage.Blobs offerto da Microsoft.

Blob Storage File - SasUri

Come potrete immaginare un file presente su Blob Storage non sempre è possibile raggiungerlo dall’esterno tramite il suo URL. Un esempio? Se il file si trova in un container privato non avremmo modo di accedervi.

Ora la domanda viene spontanea: ma se -per qualsiasi motivo- volessi condividerlo esternamente come posso fare? Devo creare una copia su un container pubblico rischiando di vedere compromessa la sicurezza del file da accessi non autorizzati?

La risposta -ovviamente- è negativa. Per farlo ci basterà generare un SasUri dove all’interno andremo a dire per quanto tempo il file sarà consumabile dall’esterno.

Ora vediamo subito come fare senza perdere troppo altro tempo.

Nuget - Installazione

Per installare in Nuget non dovremo fare altro che digitare dal Package Manager

1
Install-Package Azure.Storage.Blobs 

Utilizzo

Una volta installato nel progetto o nella solution, non dovremo fare altro che usarlo come nel seguente esempio.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public async Task<string> GetUriWthSasToken(
    string containerName, 
    string fileName, 
    int expireMinute)
    {
        var container = await GetContainerAsync(containerName);

        var blob = container.GetBlobClient(fileName);

        BlobSasPermissions permissions = BlobSasPermissions.Read;
        DateTimeOffset expiresOn = DateTime.UtcNow.AddMinutes(expireMinute);

        return blob.GenerateSasUri(permissions, expiresOn).AbsoluteUri;
    }

La chiamata GetContainerAsync la lascio scrivere a voi. Come parametro in ingresso dovrete fornire il containerName e come ritorno riceverete un oggetto di tipo BlobContainerClient

A livello di using dovrete inserire i seguenti sperando di non essermi perso qualcosa tra gli altri presenti in testa al file sorgente:

1
2
using Azure.Storage.Blobs;
using Azure.Storage.Sas;

Tips

Se nella vostra soluzione dovesse essere presente ancora Microsoft.WindowsAzure.Storage vi consiglio vivamente di procedere al rimpiazzo del NuGet con quello indicato. Purtroppo vi segnalo che l’operazione non sarà cosi indolore. Alcune chiamate potrebbero darvi errore e/o non esistere interrompendo il funzionamento del codice. Divertitevi e ricordatevi che prima effettuate questa operazione meglio è per tutti!