Мы работаем над веб-приложением на основе azure и встречаемся Постоянные Проблемы авторизации при попытке загрузить файлы в azure Blob Blob Storage . Несмотря на попытки нескольких методов аутентификации (управляемая идентификация и токены SAS) , мы продолжаем получать авторизацию failure ошибки.
🛠 Наша архитектура
- frontend: React (размещенные на статических веб -приложениях Azure)
- Backend: .NET CORE API (размещен в службе Azure App)
хранилище: < /strong> azure Blob Blob Storage < /li>
Попытка аутентификации: < /strong>
Аутентификация управляемой идентификации (предпочтительнее) - Аутентификация токена SAS (Sharkback)
< /ul>
< /li>
< /ul>
Наша цель < /strong> < /h2> < бренд /> Нам нужно разрешить Frontend (React App) для загрузки файлов в azure Blob Storage , через наш бэкэнд API надежно.
- React Frontend вызывает наш .NET Core API , что отвечает за обработку файл загружает .
- Backend с файлами Hazure Blob и загрузкой от имени фронта.
Мы должны избегать использования личных учетных данных или строк в твердо кодировании. Аутентификация идентификации < /strong>, но также и попытка sas tokens < /strong> из -за постоянных сбоев. < /Li>
< /ul>
То, что мы попробовали
1⃣ с использованием управляемой аутентификации идентификации
Мы включили Системную управляемую идентичность для нашего Backendapi (Azure App Service) и назначил ему следующие роли IAM : < /p>IAM. class = "s-table">
role < /th>
scope < /th>
< /tr>
< /thead>
Вклад данных по борьбе с данными хранилища < /td>
[code]/subscriptions/{subscriptionId}/resourceGroups/OmegaWrap< /code> < /td>
< /tr>
Владелец данных Blob Blob < /td>
/subscriptions/{subscriptionId}/resourceGroups/OmegaWrap/providers/Microsoft.Storage/storageAccounts/omegawrapstorage[/code]
Вот Раздел кода бэкэнд [/b], включая реализацию ManagedIdentityCredential , а также ссылку на источник документации Microsoft . />Backend Code (с использованием управляемой идентификации)
1⃣ defaurecredential (многопользовательский Подход)
Первый подход использует DefaultaUrecredential , который автоматически выбирает наилучший доступный метод аутентификации на основе среды.2⃣ ManagedIdentityCredential (явно нацеленная на управляемая идентичность)Код: Выделить всё
static async Task GetBlobContainerClientAsync(string storageAccount, string containerName) { var credential = new DefaultAzureCredential(); var blobServiceClient = new BlobServiceClient(new Uri($"https://{storageAccount}.blob.core.windows.net"), credential); var blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName); if (!await blobContainerClient.ExistsAsync()) { await blobContainerClient.CreateIfNotExistsAsync(PublicAccessType.None); } return blobContainerClient; }
Поскольку DefaulataRecredential попытки Несколько методов < /strong> (например, переменные среды, логин CLI, управляемая идентичность и т. Д.), Мы также попробовали напрямую, используя ManagedIdentityCredential , который явно Цели управляла аутентификацией идентификации .ошибка [/b], когда наш бэкэнд пытается аутентифицировать и загружать файлы в Hazure Blob Storage .Код: Выделить всё
static async Task GetBlobContainerClientAsync(string storageAccount, string containerName) { var credential = new ManagedIdentityCredential(); // Explicitly using Managed Identity var blobServiceClient = new BlobServiceClient(new Uri($"https://{storageAccount}.blob.core.windows.net"), credential); var blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName); if (!await blobContainerClient.ExistsAsync()) { await blobContainerClient.CreateIfNotExistsAsync(PublicAccessType.None); } return blobContainerClient; } < /code> [h4] [b] 📌 Source < /strong> < /h4> Мы следили за документацией Microsoft < /strong> На аутентификации с помощью системы управляемой идентификации < /strong>: 🔗 Microsoft Docs-Управляемая идентификация, назначенная системой в .net < /p> Несмотря на реализацию оба подхода [/b], [b] мы продолжаем получать одинаковую авторизацию failure (403)
Результат [/h4]
Сообщение об ошибке (403 - AuthorizationFailure)
This request is not authorized to perform this operation.Код: Выделить всё
AuthorizationFailure
Даже после часов ожидания для распространения ролей ошибка упорно .
проверенный идентификатор объекта управляемого идентификации и подтвердил его роль Назначения. - подтвердил эмиссию токена с помощью curl :
Код: Выделить всё
curl -H "Metadata: true" "http://169.254.169.254/metadata/identity/oauth2/token?resource=https://storage.azure.com&api-version=2019-08-01"
< /ul>
2⃣ переключение на аутентификацию Token SAS < /strong> < /h3>
После Борьба с управляемой идентичностью , мы сгенерировали токен SAS и попытались подтвердить подлинность бэкэнд таким образом. Поколение
Код: Выделить всё
az storage container generate-sas \
--account-name omegawrapstorage \
--name uploads \
--permissions acdlrw \
--expiry 2025-03-01T00:00:00Z \
--output tsv
Код: Выделить всё
var sasUri = $"https://{storageAccount}.blob.core.windows.net/{containerName}?{sasToken}";
var blobServiceClient = new BlobServiceClient(new Uri(sasUri));
var blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);
Результат
Мы продолжаем получать следующий Ошибки независимо от метода аутентификации:
1⃣ Управляемая идентичность:
Код: Выделить всё
AuthorizationFailure
2⃣ Аутентификация токена SAS:
Код: Выделить всё
AuthorizationFailure
< /code>
[*] Почему Управляемая аутентификация идентификации не выполняется, даже если назначены правильные роли IAM? Хранилище? li> Какие еще варианты существуют для надежного разрешения нашего бэкэнд API загружать файлы в хранилище Blob -Blob? На уровне счета хранения (например, брандмауэр, частные конечные точки)? < /strong> < /li>
< /ol>
🛠 Дополнительный Отладка выполнена [/b]
проверено IAM разрешения как для управляемой личности, так и для SAS Аутентификация.
[*] сгенерировал токены и проверила их претензии с использованием jwt.ms .
[*] подтверждено Политики доступа к учетной записи хранилища , которые в настоящее время допускают доступ общедоступной сети. Изменение).
[*] Пробое явное defaultaUrecredential конфигурации , гарантируя, что он использует Managed Identity .
< /ul>
На данный момент мы исчерпали Все известные подходы для правильной аутентификации с помощью хранилища Blob Blob . Если кто -то успешно внедрил защищенную аутентификацию бэкэнд для хранения Blob в среде обслуживания приложений Azure , мы действительно будем оценить ваше и рекомендации .
Любая помощь очень ценится!
Подробнее здесь: https://stackoverflow.com/questions/794 ... s-token-wi