Почему мое приложение не может получить доступ к хранилищу больших двоичных объектов с помощью этого маркера SAS? - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь получить доступ к учетной записи хранилища больших двоичных объектов и просто перечислить содержимое контейнера с помощью токена SAS. Я генерирую политику доступа (в соответствии с этим do c) и ссылаюсь на эту политику доступа и в моем токене доступа.

К сожалению, когда мой код пытается запустить ListBlobsSegmented функция, я получаю 403 (Запрещено) ошибку.

Это код, который пытается получить список больших двоичных объектов:

string storageAccountName = "ringclone";
string containerName = "ringcentral-archives";
string authenticationKey = "?sv=2018-03-28&si=ringclone-access-policy&sr=c&sig=************************";
StorageCredentials creds;
CloudStorageAccount account;
CloudBlobClient blobClient;
CloudBlobContainer cloudBlobContainer;
creds = new StorageCredentials(authenticationKey);
account = new CloudStorageAccount(creds, storageAccountName, endpointSuffix: null, useHttps: true);
blobClient = account.CreateCloudBlobClient();
cloudBlobContainer = blobClient.GetContainerReference(containerName);
BlobContinuationToken blobContinuationToken = null;
var containerSegment = blobClient.ListBlobsSegmented("", blobContinuationToken); // 403 error;

И вот шаги, которые я использую для генерации политики доступа и генерации токена SAS, который ссылается на этот доступ policy:

  1. В Azure Storage Explorer я просматриваю блоб-хранилище и нахожу указанный c контейнер, к которому я хочу предоставить доступ. Я щелкаю правой кнопкой мыши и выбираю «Управление политиками доступа».

Manage Access Policy

Затем я предоставляю все разрешения этой политике и предоставляю дату окончания, которая будет через 20 лет.

enter image description here

После нажатия «Сохранить», я go возвращаюсь к списку своих контейнеров, снова щелкаю правой кнопкой мыши по этому контейнеру и выбираю «Получить подпись общего доступа».

enter image description here

В диалоге подписи общего доступа я ссылаюсь на мою политику доступа.

enter image description here

После нажатия кнопки «Создать» у меня есть подпись общего доступа с прикрепленной политикой.

enter image description here

Затем я просто копирую / вставляю имя моей учетной записи хранения, имя контейнера и ключ авторизации в код, показанный выше. Для ключа авторизации я использую поле «Строка запроса», показанное в моем диалоговом окне «Подпись SAS». Например:

Поле Query String используется в качестве ключа авторизации, в соответствии с документами

string storageAccountName = "ringclone";
string containerName = "ringcentral-archives";
string authenticationKey = "?sv=2018-03-28&si=ringclone-access-policy&sr=c&sig=************************"; // retrieved from the "Query String" field in storage explorer.

Однако при попытке получить ошибку 403 перечислить капли в моем контейнере. Что я делаю не так?

1 Ответ

0 голосов
/ 27 января 2020

Попробуйте этот код ниже в консольном приложении:

using Microsoft.Azure.Storage.Auth;
using Microsoft.Azure.Storage.Blob;
using System;

namespace AzureStorageTest
{
    class Program
    {
        static void Main(string[] args)
        {

            string storageAccountName = "<storage account name>";
            string containerName = "<container name>";
            string sasToken = "<sas token>";
            StorageCredentials creds;
            CloudBlobContainer cloudBlobContainer;
            creds = new StorageCredentials(sasToken);

            cloudBlobContainer = new CloudBlobContainer(new Uri("https://"+ storageAccountName + ".blob.core.windows.net/"+ containerName), creds);
            BlobContinuationToken blobContinuationToken = null;
            var blobs = cloudBlobContainer.ListBlobsSegmented("", blobContinuationToken);
            foreach (var blob in blobs.Results) {
                Console.WriteLine(blob.Uri);
            }

            Console.ReadKey();
        }
    }
}

Результат:

enter image description here

Надеюсь, это поможет

...