Авторизация доступа к данным BLOB-объектов или данным очереди из приложения или веб-приложения
Ключевым преимуществом использования Azure Active Directory (Azure AD) со службой хранилища двоичных объектов Azure или очередей является то, что учетные данные больше не нужно хранить в коде. Вместо этого можно запросить маркер доступа OAuth 2.0 из платформы удостоверений Майкрософт. Azure AD выполняет проверку подлинности субъекта безопасности (пользователя, группы или субъекта-службы), на котором выполняется приложение. Если аутентификация пройдена успешно, Azure AD возвращает маркер доступа приложению, и затем приложение может использовать его для авторизации запросов к службе хранилища BLOB-объектов или очередей Azure.
В этой статье показано, как настроить собственное приложение или веб-приложение для проверки подлинности с помощью платформы удостоверений Майкрософт, используя пример приложения, доступного для загрузки. Пример приложения использует .NET, но другие языки используют аналогичный подход. Дополнительные сведения о платформе Microsoft Identity см. в статье Общие сведения о платформе Microsoft Identity.
Общие сведения о процессе предоставления кода OAuth 2.0 представлены в разделе Авторизация доступа к веб-приложениям Azure Active Directory с помощью потока предоставления кода OAuth 2.0.
Сведения о примере приложения
Пример приложения предоставляет комплексную возможность, которая показывает, как настроить веб-приложение для проверки подлинности с помощью Azure AD в локальной среде разработки. Чтобы просмотреть и запустить пример приложения, сначала скопируйте или скачайте его из GitHub. Затем выполните действия, описанные в этой статье, чтобы настроить регистрацию приложений Azure и обновить приложение для своей среды.
Назначение роли для субъекта безопасности Azure AD
Чтобы обеспечить проверку подлинности субъекта безопасности из приложения службы хранилища Azure, нужно сначала настроить параметры управления доступом на основе ролей (Azure RBAC) для этого субъекта безопасности. Служба хранилища Azure определяет встроенные роли, которые включают в себя разрешения для контейнеров и очередей. При назначении роли Azure субъекту безопасности ему предоставляется доступ к соответствующему ресурсу. Дополнительные сведения см. в статье Назначение роли Azure для доступа к данным BLOB-объектов.
Регистрация приложения в клиенте Azure AD
Первым шагом в использовании Azure AD для авторизации доступа к ресурсам хранилища является регистрация клиентского приложения в клиенте Azure AD из портал Azure. При регистрации приложения вы отправляете сведения о приложении в Azure AD. После этого служба Azure AD предоставляет идентификатор клиента (также называемый идентификатором приложения), позволяющий связать с ней приложение во время выполнения. Дополнительные сведения об идентификаторе клиента см. в статье Объекты приложения и субъекта-службы в Azure Active Directory. Чтобы зарегистрировать приложение службы хранилища Azure, выполните действия, описанные в разделе Краткое руководство по регистрации приложения на платформе Microsoft Identity.
На следующем рисунке показаны общие параметры регистрации веб-приложения. Обратите внимание, что в этом примере URI перенаправления устанавливается в http://localhost:5000/signin-oidc для тестирования примера приложения в среде разработки. Этот параметр можно изменить позже в параметрах проверки подлинности для зарегистрированного приложения в портал Azure:
Примечание
При регистрации приложения как собственного вы можете указать любой допустимый универсальный код ресурса (URI) в качестве URI перенаправления. Для собственных приложений это значение не обязательно должно быть действительным URL-адресом. Для веб-приложений URI перенаправления должен быть допустимым URI, так как он указывает URL-адрес, на который предоставляются токены.
После регистрации приложения в разделе Параметры отобразится идентификатор приложения (идентификатор клиента).
Дополнительные сведения о регистрации приложения в Azure AD см. в разделе Интеграция приложений с Azure Active Directory.
Предоставление зарегистрированному приложению разрешений для службы хранилища Azure
Далее предоставьте приложению разрешения для вызова интерфейсов API службы хранилища Azure. Это позволит вашему приложению авторизовать вызовы к службе хранилища Azure с помощью Azure AD.
На странице разрешения API для зарегистрированного приложения выберите Добавить разрешение.
На вкладке API-интерфейсы Майкрософт выберите Службахранилища Azure.
В области разрешений API запроса в разделе какой тип разрешений требуется приложению? убедитесь, что доступное разрешение имеет тип делегированных разрешений. Этот параметр выбран по умолчанию.
В разделе разрешенияустановите флажок рядом с user_impersonation, а затем нажмите кнопку Добавить разрешения.
Затем предоставьте администратору согласие на эти разрешения, щелкнув предоставить согласие администратора для каталога по умолчанию.
Панель разрешений API теперь показывает, что зарегистрированное приложение Azure AD имеет доступ как к Microsoft Graph, так и к API-интерфейсам хранилища Azure, и это разрешение предоставляется для каталога по умолчанию. Разрешения Microsoft Graph предоставляются автоматически во время первой регистрации приложения в Azure AD.
Создание секрета клиента
Приложению требуется секрет клиента для подтверждения его личности при запросе маркера. По соображениям безопасности корпорация Майкрософт не разрешает создавать секреты клиента со сроком более 24 месяцев и настоятельно рекомендует установить значение меньше 12 месяцев. Чтобы добавить секрет клиента, выполните следующие действия.
Перейдите к регистрации приложения в портале Azure.
Выберите параметр Секреты & сертификатов.
В разделе Секреты клиента выберите Новый секрет клиента, чтобы создать новый секрет.
Введите описание секрета и выберите требуемый срок действия.
Сразу скопируйте значение нового секрета в безопасное место. Полное значение отображается только один раз.

Включите процесс предоставления неявных разрешений
Затем настройте неявный поток предоставления для приложения. Выполните следующие действия.
Перейдите к регистрации приложения в портале Azure.
В разделе Управление выберите параметр Проверка подлинности.
В разделе неявное предоставление установите флажок, чтобы включить маркеры идентификации, как показано на следующем рисунке:
Клиентские библиотеки для получения маркера
После регистрации приложения и предоставления ему разрешений на доступ к данным в хранилище BLOB-объектов Azure или хранилище очередей можно добавить код в приложение для проверки подлинности субъекта безопасности и получения маркера OAuth 2,0. Для проверки подлинности и получения маркера можно использовать одну из библиотек проверки подлинности платформы идентификации Microsoft Identity или другую библиотеку с открытым исходным кодом, которая поддерживает openid Connect 1,0. Приложение может использовать маркер доступа для авторизации запроса к хранилищу BLOB-объектов Azure или хранилищу очередей.
Список сценариев, для которых поддерживается получение маркеров, см. в разделе потоки проверки подлинности в документации по библиотеке проверки подлинности Майкрософт (MSAL).
Известные значения для аутентификации с помощью Azure AD
Чтобы выполнить аутентификацию субъекта безопасности с помощью Azure AD, необходимо добавить в код некоторые известные значения.
Центр Azure AD
Ниже приведен базовый центр Azure AD для общедоступного облака Microsoft, где tenant-id — это идентификатор клиента Active Directory (или идентификатор каталога).
https://login.microsoftonline.com/<tenant-id>/
Идентификатор клиента определяет клиент Azure AD для аутентификации. Он также называется "Идентификатором клиента". Чтобы получить идентификатор клиента, перейдите на страницу обзора для регистрации приложения в портал Azure и скопируйте значение из него.
Идентификатор ресурса хранилища Azure
Идентификатор ресурса Azure AD определяет аудиторию, которой можно предоставить доступ к ресурсу Azure с помощью выданного маркера. Для доступа к службе хранилища Azure идентификатор ресурса может применяться к одной конкретной учетной записи хранения или к любой учетной записи хранения. В следующей таблице приведены значения, которые можно указать в качестве идентификатора ресурса:
| Идентификатор ресурса | Описание |
|---|---|
https://<account>.blob.core.windows.net https://<account>.queue.core.windows.net |
Конечная точка службы для определенной учетной записи хранения. Это значение позволяет получить маркер для авторизации запросов только к этой конкретной учетной записи хранения Azure и к службе. Замените значение в угловых скобках именем своей учетной записи хранения. |
https://storage.azure.com/ |
Это значение позволяет получить маркер для авторизации запросов к любой учетной записи хранения Azure. |
Пример кода .NET: создание блочного BLOB-объекта
В примере кода показано, как получить маркер доступа из Azure AD. Маркер доступа используется для аутентификации указанного пользователя и последующей авторизации запроса на создание блочного BLOB-объекта. Чтобы этот пример работал, сначала выполните инструкции в предыдущих разделах.
Чтобы запросить маркер, вам потребуются следующие значения из регистрации приложения:
- Имя домена Azure AD. Получите это значение на странице обзора Azure Active Directory.
- Идентификатор клиента (или каталога). Получите это значение на странице обзора регистрации приложения.
- Идентификатор клиента (или приложения). Получите это значение на странице обзора регистрации приложения.
- URI перенаправления клиента. Извлеките это значение из параметров проверки подлинности для регистрации приложения.
- Значение секрета клиента. Извлеките это значение из расположения, в которое было скопировано ранее.
Создание учетной записи хранения и контейнера
Чтобы запустить пример кода, создайте учетную запись хранения в той же подписке, в которой находится Azure Active Directory. Затем создайте контейнер в этой учетной записи хранения. Пример кода создаст блочный BLOB-объект в этом контейнере.
Затем явно назначьте роль участника данных BLOB-объекта хранилища учетной записи пользователя, под которой будет выполняться пример кода. Чтобы узнать, как проверять и назначать роли на портале Azure, ознакомьтесь с разделом Назначение роли Azure для доступа к данным BLOB-объектов.
Примечание
При создании учетной записи хранения Azure вы не назначаете разрешения на доступ к данным через Azure AD автоматически. Для службы хранилища Azure вы должны назначить себе роль RBAC явным образом. Вы можете назначить ее на уровне подписки, группы ресурсов, учетной записи хранения, контейнера или очереди.
Прежде чем назначать себе роль для доступа к данным, вы сможете получить доступ к данным в учетной записи хранения с помощью портала Azure, так как портал Azure также может использовать ключ учетной записи для доступа к данным. Дополнительные сведения см. в разделе Выбор способа авторизации доступа к данным BLOB-объектов в портал Azure.
Создание веб-приложения, которое разрешает доступ к хранилищу больших двоичных объектов с помощью Azure AD
Когда приложение обращается к службе хранилища Azure, оно делает это от имени пользователя, то есть доступ к ресурсам большого двоичного объекта или очереди осуществляется с помощью разрешений пользователя, выполнившего вход. Чтобы испытать этот пример кода, вам потребуется веб-приложение, предлагающее пользователю выполнить вход с помощью удостоверения Azure AD. Вы можете создать собственный или использовать пример приложения, предоставляемый корпорацией Майкрософт.
Готовый пример веб-приложения, который получает маркер и использует его для создания большого двоичного объекта в службе хранилища Azure, доступен на сайте GitHub. Просмотр и выполнение завершенного примера может оказаться полезным для понимания примеров кода. Инструкции по выполнению завершенного примера см. в разделе представление с именем и запуск завершенного примера.
Добавление ссылок и инструкций using
В Visual Studio установите клиентскую библиотеку службы хранилища Azure для C++. В меню Сервис выберите Диспетчер пакетов NuGet, а затем — Консоль диспетчера пакетов. Введите следующие команды в окне консоли, чтобы установить необходимые пакеты из клиентской библиотеки службы хранилища Azure для .NET:
Install-Package Azure.Storage.Blobs
Install-Package Microsoft.Identity.Web -Version 0.4.0-preview
Затем добавьте следующие операторы использования в файл HomeController.cs:
using Microsoft.Identity.Web; //MSAL library for getting the access token
using Azure.Storage.Blobs;
Создание блочного BLOB-объекта
Добавьте следующий фрагмент кода, чтобы создать блочный BLOB-объект. Не забудьте заменить значения в угловых скобках собственными значениями.
private static async Task<string> CreateBlob(TokenAcquisitionTokenCredential tokenCredential)
{
Uri blobUri = new Uri("https://<storage-account>.blob.core.windows.net/<container>/Blob1.txt");
BlobClient blobClient = new BlobClient(blobUri, tokenCredential);
string blobContents = "Blob created by Azure AD authenticated user.";
byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);
using (MemoryStream stream = new MemoryStream(byteArray))
{
await blobClient.UploadAsync(stream);
}
return "Blob successfully created";
}
Примечание
Для авторизации операций BLOB-объектов и очередей с маркером OAuth 2,0 необходимо использовать протокол HTTPS.
В приведенном выше примере клиентская библиотека .NET обрабатывает авторизацию запроса для создания блочного BLOB-объекта. Клиентские библиотеки службы хранилища Azure для других языков также выполняют авторизацию запроса. Тем не менее, если вы вызываете операцию Службы хранилища Azure через REST API с помощью маркера OAuth, создать заголовок Авторизации нужно также с помощью маркера OAuth.
Чтобы вызвать операции служб очередей и BLOB-объектов с помощью маркеров доступа OAuth, передайте маркер доступа в заголовок Authorization с помощью схемы Bearer и укажите версию службы 2017-11-09 (или новее), как показано в примере ниже.
GET /container/file.txt HTTP/1.1
Host: mystorageaccount.blob.core.windows.net
x-ms-version: 2017-11-09
Authorization: Bearer eyJ0eXAiOnJKV1...Xd6j
Получение токена доступа из Azure AD
Затем добавьте метод, который запрашивает маркер из Azure AD от имени пользователя. Этот метод определяет область, для которой должны быть предоставлены разрешения. Дополнительные сведения о разрешениях на доступ к Power BI см. в статье Разрешения и согласие для конечной точки платформы удостоверений Майкрософт.
Используйте идентификатор ресурса для создания области, для которой необходимо получить маркер. В примере область создается с использованием идентификатора ресурса вместе со встроенной user_impersonation областью, которая указывает на то, что маркер запрашивается от имени пользователя.
Помните, что может потребоваться предоставить пользователю интерфейс, позволяющий пользователю получить согласие на запрос маркера от его имени:
[AuthorizeForScopes(Scopes = new string[] { "https://storage.azure.com/user_impersonation" })]
public async Task<IActionResult> Blob()
{
string message = await CreateBlob(new TokenAcquisitionTokenCredential(_tokenAcquisition));
ViewData["Message"] = message;
return View();
}
Согласие — это процесс предоставления пользователем разрешения приложению получать доступ к защищенным ресурсам от имени пользователя. Платформа Microsoft Identity поддерживает добавочное согласие, что означает, что участник безопасности может сначала запрашивать минимальный набор разрешений, а также добавлять разрешения по мере необходимости. Когда код запрашивает маркер доступа, укажите область разрешений, необходимых приложению. Дополнительные сведения о последовательном согласии см. в разделе добавочное и динамическое согласие.
Просмотр и запуск завершенного примера
Чтобы запустить пример приложения, сначала скопируйте или скачайте его из GitHub. Затем обновите приложение, как описано в следующих разделах.
Указание значений в файле параметров
Обновите appsettings.json файле собственными значениями, как показано ниже.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "<azure-ad-domain-name>.onmicrosoft.com",
"TenantId": "<tenant-id>",
"ClientId": "<client-id>",
"ClientSecret": "<client-secret>",
"ClientCertificates": [
],
"CallbackPath": "/signin-oidc"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Обновление учетной записи хранения и имени контейнера
В файле HomeController.cs обновите универсальный код ресурса (URI), который ссылается на блочный BLOB-объект, чтобы использовать имя вашей учетной записи хранения и контейнера, заменив значения в угловых скобках собственными значениями:
https://<storage-account>.blob.core.windows.net/<container>/Blob1.txt