Сгенерированная проблема SAS версии BLOB-объекта Azure

Я пытаюсь создать версию SAS для большого двоичного объекта, чтобы разрешить доступ для чтения к одной конкретной версии большого двоичного объекта. У меня было поколение SAS, работающее для корневого большого двоичного объекта, и я попытался изменить его для функции управления версиями большого двоичного объекта, добавив BlobVersionId, однако сервер возвращает 403.

Измененный SAS Builder для конкретной версии большого двоичного объекта: (не работает)

public string GetBlobSasTokenAsync(string containerName, string blobName, string blobVersionId, string fileName)
    {
        var sasBuilder = new BlobSasBuilder()
        {
            BlobContainerName = containerName,
            BlobName = blobName,
            BlobVersionId = blobVersionId,
            StartsOn = DateTime.UtcNow.Subtract(_clockSlew),
            ExpiresOn = DateTime.UtcNow.AddMinutes(AccessDuration) + _clockSlew,
            ContentDisposition = "inline; filename=" + fileName,
            ContentType = GetContentType(fileName)
        };

        sasBuilder.SetPermissions("r");

        var storageSharedKeyCredential = new StorageSharedKeyCredential(_accountName, _accountKey);

        var sasQueryParameters = sasBuilder.ToSasQueryParameters(storageSharedKeyCredential);

        return sasQueryParameters.ToString();
    }

URI SAS: https://xyz.blob.core.windows.net/container/blobname?sv=2019-12-12&st=2020-07-07T20%3A44%3A38Z&se=2020-07-07T22%3A14%3A38Z&sr=bv&sp=r&rscd=inline%3B+filename%3Dfilename.txt&rsct=text%2Fplain&sig=xyz

Ошибка:

<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>AuthenticationFailed</Code>
    <Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:63b83bb8-201e-00a8-55a1-544fe3000000
Time:2020-07-07T21:01:08.2149986Z</Message>
    <AuthenticationErrorDetail>The specified signed resource is not allowed for the this resource level</AuthenticationErrorDetail>
</Error>

Использование: Azure.Storage.Blobs 12.5.0-preview.5


person jpdurand    schedule 07.07.2020    source источник


Ответы (1)


Я пытался сгенерировать SAS и получить доступ к BLOB-объектам по-вашему, но обнаружил, что это не сработало, вы можете использовать официально рекомендованный way: https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=<DateTime> и объедините SAS сзади.

Следует отметить, что таким образом вам не нужно добавлять атрибут BlobVersionId при генерации SAS.

Наконец, ваш URL-адрес должен быть таким : https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=<DateTime>&<SAS>.

person Frank Gong    schedule 08.07.2020