Tworzenie definicji sygnatury dostępu współdzielonego i pobieranie tokenów sygnatury dostępu współdzielonego w kodzie (starsza wersja)

Konto magazynu można zarządzać przy użyciu tokenów sygnatury dostępu współdzielonego (SAS) przechowywanych w magazynie kluczy. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatury dostępu współdzielonego.

Uwaga

Zalecamy użycie kontroli dostępu opartej na rolach (RBAC) platformy Azure w celu zabezpieczenia konta magazynu w celu zapewnienia doskonałego bezpieczeństwa i łatwości użycia w przypadku autoryzacji klucza współdzielonego.

Ten artykuł zawiera przykłady kodu platformy .NET, który tworzy definicję sygnatury dostępu współdzielonego i pobiera tokeny SAS. Zobacz nasz przykład ShareLink , aby uzyskać szczegółowe informacje, w tym wygenerowany klient dla kont magazynu zarządzanego przez usługę Key Vault. Aby uzyskać informacje na temat tworzenia i przechowywania tokenów SAS, zobacz Zarządzanie kluczami konta magazynu przy użyciu usługi Key Vault i interfejsu wiersza polecenia platformy Azure lub Zarządzanie kluczami konta magazynu za pomocą usługi Key Vault i programu Azure PowerShell.

Przykłady kodu

W poniższym przykładzie utworzymy szablon sygnatury dostępu współdzielonego:

private static string BuildSasDefinitionTemplate(bool readOnly) =>
    new StringBuilder("sv=2018-03-28")  // service version
        .Append("&spr=https")           // HTTPS only
        .Append("&ss=bf")               // blobs and files only
        .Append("&srt=o")               // applies to objects only
        .Append(readOnly ? "&sp=r" : "&sp=rw")  // read-only or read-write
        .ToString();

Za pomocą tego szablonu możemy utworzyć definicję sygnatury dostępu współdzielonego przy użyciu

string sasDefinitionName = BuildSasDefinitionName(Tag, readOnly, duration);
SasDefinitionAttributes sasDefinitionAttributes = new SasDefinitionAttributes
{
    Enabled = true,
};

Dictionary<string, string> tags = new Dictionary<string, string>
{
    [Tag] = "1",
};

SasDefinitionBundle createdSasDefinition = await storageClient.SetSasDefinitionAsync(
    storageAccountName,
    sasDefinitionName,
    sasTemplate,
    SasTokenType.Account,
    duration,
    sasDefinitionAttributes,
    tags,
    s_cancellationTokenSource.Token);

Po utworzeniu definicji sygnatury dostępu współdzielonego można pobrać tokeny SAS, takie jak wpisy tajne, przy użyciu elementu SecretClient. Musisz wstępnie poprzeć nazwę wpisu tajnego nazwą konta magazynu, po którym następuje kreska:

// Build our SAS template, get an existing SAS definition, or create a new one.
string sasTemplate = BuildSasDefinitionTemplate(readOnly);
string sasDefinitionName = await GetOrCreateSasDefinitionAsync(storageClient, storageAccountName, sasTemplate, days, readOnly);

// Now we can create a SecretClient and generate a new SAS token from the storage account and SAS definition names.
SecretClient secretClient = new SecretClient(vaultUri, credential, options);
KeyVaultSecret sasToken = await secretClient.GetSecretAsync($"{storageAccountName}-{sasDefinitionName}", cancellationToken: s_cancellationTokenSource.Token);

Jeśli token sygnatury dostępu współdzielonego wkrótce wygaśnie, możesz ponownie pobrać ten sam wpis tajny, aby wygenerować nowy.

Aby uzyskać przewodnik dotyczący używania tokenu sas usługi Key Vault do uzyskiwania dostępu do usług Azure Storage, zobacz Używanie sygnatury dostępu współdzielonego konta do uzyskiwania dostępu do usługi Blob Service

Uwaga

Aplikacja musi być przygotowana do odświeżenia sygnatury dostępu współdzielonego, jeśli otrzyma ona 403 z magazynu, aby można było obsłużyć przypadek naruszenia zabezpieczeń klucza i trzeba je obracać szybciej niż normalny okres rotacji.

Następne kroki