Creare una firma di accesso condiviso del servizio per un BLOB con Java

Una firma di accesso condiviso consente di concedere l'accesso limitato a contenitori e BLOB nell'account di archiviazione. Quando si crea una firma di accesso condiviso, si specificano i vincoli, tra cui quali Archiviazione di Azure risorse a cui un client è autorizzato ad accedere, quali autorizzazioni hanno per tali risorse e per quanto tempo la firma di accesso condiviso è valida.

Ogni firma di accesso condiviso viene firmata con una chiave. È possibile firmare una firma di accesso condiviso in uno dei due modi seguenti:

  • Con una chiave creata usando le credenziali di Microsoft Entra. Una firma di accesso condiviso firmata con le credenziali di Microsoft Entra è una firma di accesso condiviso della delega utente. A un client che crea una firma di accesso condiviso della delega utente deve essere assegnato un ruolo controllo degli accessi in base al ruolo di Azure che include Microsoft.ArchiviazioneAzione /storageAccounts/blobServices/generateUserDelegationKey. Per altre informazioni, vedere Creare una firma di accesso condiviso di delega utente.
  • Con la chiave dell'account di archiviazione. Sia una firma di accesso condiviso del servizio che una firma di accesso condiviso dell'account di archiviazione sono firmate con la chiave dell'account di archiviazione. Il client che crea una firma di accesso condiviso del servizio deve avere accesso diretto alla chiave dell'account o deve essere assegnato a Microsoft.ArchiviazioneAutorizzazione /storageAccounts/listkeys/action. Per altre informazioni, vedere Creare una firma di accesso condiviso del servizio o Creare una firma di accesso condiviso dell'account.

Nota

Una firma di accesso condiviso della delega utente offre una sicurezza superiore a una firma di accesso condiviso firmata con la chiave dell'account di archiviazione. Quando possibile, Microsoft consiglia di usare una firma di accesso condiviso per la delega utente. Per altre informazioni, vedere Concedere l'accesso limitato ai dati con firme di accesso condiviso.

Questo articolo illustra come usare la chiave dell'account di archiviazione per creare una firma di accesso condiviso del servizio per un BLOB con la libreria client blob Archiviazione per Java.

Informazioni sulla firma di accesso condiviso del servizio

Una firma di accesso condiviso del servizio viene firmata con la chiave di accesso dell'account. È possibile usare la classe Archiviazione SharedKeyCredential per creare le credenziali usate per firmare la firma di accesso condiviso del servizio.

È anche possibile usare criteri di accesso archiviati per definire le autorizzazioni e la durata della firma di accesso condiviso. Se viene specificato il nome di un criterio di accesso archiviato esistente, tale criterio è associato alla firma di accesso condiviso. Per altre informazioni sui criteri di accesso archiviati, vedere Definire un criterio di accesso archiviato. Se non vengono forniti criteri di accesso archiviati, gli esempi di codice in questo articolo illustrano come definire le autorizzazioni e la durata per la firma di accesso condiviso.

Creare una firma di accesso condiviso del servizio per un BLOB

È possibile creare una firma di accesso condiviso del servizio per delegare l'accesso limitato a una risorsa BLOB usando il metodo seguente:

I valori della firma di firma di accesso condiviso, ad esempio l'ora di scadenza e le autorizzazioni firmate, vengono passati al metodo come parte di un'istanza blobServiceSasSignatureValues . Le autorizzazioni vengono specificate come istanza blobSasPermission .

L'esempio di codice seguente illustra come creare una firma di accesso condiviso del servizio con autorizzazioni di lettura per una risorsa BLOB:

public String createServiceSASBlob(BlobClient blobClient) {
    // Create a SAS token that's valid for 1 day, as an example
    OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);

    // Assign read permissions to the SAS token
    BlobSasPermission sasPermission = new BlobSasPermission()
            .setReadPermission(true);

    BlobServiceSasSignatureValues sasSignatureValues = new BlobServiceSasSignatureValues(expiryTime, sasPermission)
            .setStartTime(OffsetDateTime.now().minusMinutes(5));

    String sasToken = blobClient.generateSas(sasSignatureValues);
    return sasToken;
}

Usare una firma di accesso condiviso del servizio per autorizzare un oggetto client

Nell'esempio di codice seguente viene illustrato come usare la firma di accesso condiviso del servizio creata nell'esempio precedente per autorizzare un oggetto BlobClient . Questo oggetto client può essere usato per eseguire operazioni sulla risorsa BLOB in base alle autorizzazioni concesse dalla firma di accesso condiviso.

Creare prima di tutto un oggetto BlobServiceClient firmato con la chiave di accesso dell'account:

String accountName = "<account-name>";
String accountKey = "<account-key>";
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
        
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint(String.format("https://%s.blob.core.windows.net/", accountName))
        .credential(credential)
        .buildClient();

Generare quindi la firma di accesso condiviso del servizio come illustrato nell'esempio precedente e usare la firma di accesso condiviso per autorizzare un oggetto BlobClient :

// Create a SAS token
BlobClient blobClient = blobServiceClient
        .getBlobContainerClient("sample-container")
        .getBlobClient("sample-blob.txt");
String sasToken = createServiceSASBlob(blobClient);

// Create a new BlobClient using the SAS token
BlobClient sasBlobClient = new BlobClientBuilder()
        .endpoint(blobClient.getBlobUrl())
        .sasToken(sasToken)
        .buildClient();

Risorse

Per altre informazioni sull'uso della libreria client Archiviazione BLOB di Azure per Java, vedere le risorse seguenti.

Risorse della libreria client

Vedi anche