Серверу AzureStorage Blob не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись

Я пытаюсь загрузить изображение в Windows Azure Blob и получаю следующую ошибку, которую не могу обработать.

Серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.

Ошибка возникает при попытке создать контейнер.

   container.CreateIfNotExists()

Вот мой код

try
{
    Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

    // Retrieve a reference to a container. 
    CloudBlobContainer container = blobClient.GetContainerReference("samples");

    // Create the container if it does not already exist.
    // here is the error
    if (container.CreateIfNotExists())
    {
        container.SetPermissions(
            new BlobContainerPermissions
            {
                PublicAccess = BlobContainerPublicAccessType.Blob
            });
    }

    CloudBlockBlob blockBlob = container.GetBlockBlobReference("Image1");
    using (var fileStream = System.IO.File.OpenRead(@"Path"))
    {
        blockBlob.UploadFromStream(fileStream);
    }
}
catch (StorageException ex1)
{
    throw ex1;
}

Я перепробовал много вариантов в своем коде, но все еще получаю сообщение об ошибке.

Кто-нибудь может помочь мне? Благодарю.

Ответ 1

Время моего ПК отключилось на 1 час, как было предложено другими в комментариях. Исправление этого вопроса решило проблему.

Ответ 2

в моем случае истек срок действия подписи общего доступа (SAS). Обновление (фактически создание новой) подписи общего доступа в portal.azure.com путем добавления года (или более) даты окончания в будущем. И все проблемы исправлены.

Ответ 3

Я получил это сообщение, когда пытался получить доступ к BLOB-хранилищу через конечную точку API REST.

Ниже приведен ответ, который я получил при вызове операции контейнера списка с заголовком Authorization

<?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:096c6d73-f01e-0054-6816-e8eaed000000
Time:2019-03-31T23:08:43.6593937Z</Message>
    <AuthenticationErrorDetail>Authentication scheme Bearer is not supported in this version.</AuthenticationErrorDetail>
</Error>

решение было включить ниже заголовок

x-ms-version: 2017-11-09

Ответ 4

Проверьте часовой пояс вашего компьютера или мобильного телефона.

Ответ 5

В моем случае я передавал строку подключения к хранилищу с подписью доступа в качестве аргумента консольного приложения. "%" в командной строке - это специальный символ "параметры командной строки". "%" появляется в подписи доступа (SAS). Вы должны избежать процента%, удвоить его %%.