Udostępnij za pośrednictwem


Tworzenie sygnatury dostępu współdzielonego usługi dla kontenera lub obiektu blob przy użyciu języka Java

Sygnatura dostępu współdzielonego (SAS) umożliwia udzielanie ograniczonego dostępu do kontenerów i obiektów blob na koncie magazynu. Podczas tworzenia sygnatury dostępu współdzielonego określasz jego ograniczenia, w tym zasoby usługi Azure Storage, do których może uzyskiwać dostęp klient, jakie uprawnienia mają w tych zasobach i jak długo sygnatura dostępu współdzielonego jest prawidłowa.

Każda sygnatura dostępu współdzielonego jest podpisana przy użyciu klucza. Sygnaturę dostępu współdzielonego można podpisać na jeden z dwóch sposobów:

  • Za pomocą klucza utworzonego przy użyciu poświadczeń firmy Microsoft Entra. Sygnatura dostępu współdzielonego podpisana przy użyciu poświadczeń usługi Microsoft Entra to sygnatura dostępu współdzielonego delegowania użytkownika. Klient, który tworzy sygnaturę dostępu współdzielonego delegowania użytkownika, musi mieć przypisaną rolę RBAC platformy Azure obejmującą akcję Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Aby dowiedzieć się więcej, zobacz Tworzenie sygnatury dostępu współdzielonego delegowania użytkownika.
  • Przy użyciu klucza konta magazynu. Sygnatura dostępu współdzielonego usługi i sygnatura dostępu współdzielonego konta są podpisane przy użyciu klucza konta magazynu. Klient tworzący sygnaturę dostępu współdzielonego usługi musi mieć bezpośredni dostęp do klucza konta lub mieć przypisane uprawnienie Microsoft.Storage/storageAccounts/listkeys/action . Aby dowiedzieć się więcej, zobacz Tworzenie sygnatury dostępu współdzielonego usługi lub Tworzenie sygnatury dostępu współdzielonego konta.

Uwaga

Sygnatura dostępu współdzielonego delegowania użytkownika zapewnia doskonałe zabezpieczenia sygnatury dostępu współdzielonego podpisanej przy użyciu klucza konta magazynu. Firma Microsoft zaleca używanie sygnatury dostępu współdzielonego delegowania użytkowników, jeśli jest to możliwe. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do danych za pomocą sygnatur dostępu współdzielonego (SAS).

W tym artykule pokazano, jak za pomocą klucza konta magazynu utworzyć sygnaturę dostępu współdzielonego usługi dla kontenera lub obiektu blob z biblioteką klienta usługi Blob Storage dla języka Java.

Informacje o sygnaturze dostępu współdzielonego usługi

Sygnatura dostępu współdzielonego usługi jest podpisana przy użyciu klucza dostępu do konta. Możesz użyć klasy StorageSharedKeyCredential , aby utworzyć poświadczenia używane do podpisywania sygnatury dostępu współdzielonego usługi.

Możesz również użyć zapisanych zasad dostępu, aby zdefiniować uprawnienia i czas trwania sygnatury dostępu współdzielonego. Jeśli podano nazwę istniejących przechowywanych zasad dostępu, te zasady są skojarzone z sygnaturą dostępu współdzielonego. Aby dowiedzieć się więcej na temat przechowywanych zasad dostępu, zobacz Definiowanie przechowywanych zasad dostępu. Jeśli nie podano żadnych przechowywanych zasad dostępu, przykłady kodu w tym artykule pokazują, jak zdefiniować uprawnienia i czas trwania sygnatury dostępu współdzielonego.

Tworzenie sygnatury dostępu współdzielonego usługi

Sygnaturę dostępu współdzielonego usługi dla kontenera lub obiektu blob można utworzyć na podstawie potrzeb aplikacji.

Sygnaturę dostępu współdzielonego usługi można utworzyć, aby delegować ograniczony dostęp do zasobu kontenera przy użyciu następującej metody:

Wartości sygnatur sygnatury dostępu współdzielonego, takie jak czas wygaśnięcia i podpisane uprawnienia, są przekazywane do metody w ramach wystąpienia blobServiceSasSignatureValues . Uprawnienia są określane jako wystąpienie obiektu BlobContainerSasPermission .

Poniższy przykład kodu przedstawia sposób tworzenia sygnatury dostępu współdzielonego usługi z uprawnieniami do odczytu dla zasobu kontenera:

public String createServiceSASContainer(BlobContainerClient containerClient) {
    // 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
    BlobContainerSasPermission sasPermission = new BlobContainerSasPermission()
            .setReadPermission(true);

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

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

Używanie sygnatury dostępu współdzielonego usługi do autoryzowania obiektu klienta

Sygnatura dostępu współdzielonego usługi umożliwia autoryzowanie obiektu klienta do wykonywania operacji na kontenerze lub obiekcie blob na podstawie uprawnień przyznanych przez sygnaturę dostępu współdzielonego.

W poniższych przykładach kodu pokazano, jak autoryzować obiekt BlobContainerClient przy użyciu sygnatury dostępu współdzielonego usługi. Ten obiekt klienta może służyć do wykonywania operacji na zasobie kontenera na podstawie uprawnień przyznanych przez sygnaturę dostępu współdzielonego.

Najpierw utwórz obiekt BlobServiceClient podpisany przy użyciu klucza dostępu do konta:

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();

Następnie wygeneruj sygnaturę dostępu współdzielonego usługi, jak pokazano we wcześniejszym przykładzie, i użyj sygnatury dostępu współdzielonego , aby autoryzować obiekt BlobContainerClient :

// Create a SAS token
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("sample-container");
String sasToken = createServiceSASContainer(containerClient);

// Create a new BlobContainerClient using the SAS token
BlobContainerClient sasContainerClient = new BlobContainerClientBuilder()
        .endpoint(containerClient.getBlobContainerUrl())
        .sasToken(sasToken)
        .buildClient();

Zasoby

Aby dowiedzieć się więcej na temat korzystania z biblioteki klienta usługi Azure Blob Storage dla języka Java, zobacz następujące zasoby.

Przykłady kodu

Zasoby biblioteki klienta

Zobacz też