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

Я почти просмотрел все ответы SO, связанные с этим и другими форумами, но я до сих пор не могу понять реальную проблему. Это консольное приложение, которое будет развернуто в локальной среде и будет отправлять файлы в большой двоичный объект Azure.

Я использую WindowsAzure.Storage 9.3.3 с приведенным ниже кодом.

static void CreateBlob(string accountName, string containerName, string blobName, string accessToken)
{
        var tokenCredential = new TokenCredential(accessToken);
        var storageCredentials = new StorageCredentials(tokenCredential);
        var storageAccount = new CloudStorageAccount(storageCredentials, accountName, string.Empty, useHttps: true);
        var cloudBlobClient = storageAccount.CreateCloudBlobClient();

        var cloudBlobContainer = cloudBlobClient.GetContainerReference(containerName);
        CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(blobName);

        string blobContents = "Blob created by Azure AD authenticated user.";
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        try
        {
            using (MemoryStream stream = new MemoryStream(byteArray))
            {
                blockBlob.UploadFromStreamAsync(stream).Wait();
            }
            Console.WriteLine("upload successful");
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadLine();
        }
}    

И чтобы получить токен, как показано ниже.

        public static string GetOAuthToken(string activeDirectoryTenantId, string  
           activeDirectoryApplicationSecret, string activeDirectoryApplicationId)
        {
            string resourceId = $"https://storage.azure.com";
            var authority = String.Format("https://login.windows.net/" + activeDirectoryTenantId);

            var credential = new ClientCredential(activeDirectoryApplicationId, activeDirectoryApplicationSecret);

            var context = new AuthenticationContext(authority);
            var result = context.AcquireTokenAsync(resourceId, credential).Result;

            return result.AccessToken;
        }    

Может ли кто-нибудь предложить, что мне может не хватать?
P/S Я уже подтвердил, что моя локальная система синхронизирована с правильным временем UTC.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
6 368
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался использовать код в вашей проблеме, он успешно загрузил большой двоичный объект.

Примечание:

  1. Назначьте Storage Blob Data Contributor роль приложению

Перейдите к учетной записи хранения -> Контроль доступа (IAM) -> Добавить назначение ролей.

  1. Предоставьте зарегистрированному приложению разрешения на доступ к хранилищу Azure, выполнив этот шаг.

Да, для меня не хватало второго шага. Спасибо

Amir 11.12.2020 21:07

Другие вопросы по теме

Похожие вопросы

По какой причине ссылочные типы, допускающие значение NULL, определенные в членах интерфейса, не должны быть допускающими значение NULL в реализациях?
Получить расширенные дополнительные свойства с помощью graphclient
Обновление свойств двоичного класса Serialized c# .NET эффективно повреждает файлы
Как отобразить выбранную строку в текстовом поле MVP С#
Подсчитайте количество символов в строке и удалите дубликаты
500 ошибок при обслуживании статического контента с сайтов ASP .Net Framework 4.5 с использованием пользовательской учетной записи в пуле приложений
Добавить метаданные для всех вызовов службы gRPC
Является ли Task.Delay действительно асинхронным, как операция ввода-вывода, т. е. полагается ли он на аппаратное обеспечение и прерывания вместо потока?
Совместное использование файлов cookie аутентификации между приложениями .net 4x и .net 5 — доступ к пользовательскому принципу ClaimsPrinciple
Почему невозможно вызвать .ToArray непосредственно в GroupCollection, даже если это IEnumerable?