Проверка подлинности с помощью пакета Azure SDK для .NET

Новейшие пакеты в пакете Azure SDK для .NET используют для проверки подлинности общий пакет Azure.Identity. Именно этот пакет Azure.Identity является рекомендуемым по сравнению с другими механизмами проверки подлинности, описанными далее в этом документе. Идентификаторы пакетов, поддерживающие учетные данные, предоставленные Azure.Identity, создаются поверх Azure.Core и начинаются с Azure. См. список пакетов, в котором представлены сведения об инвентаризации пакетов, использующих Azure.Core.

Полные инструкции по использованию Azure.Identity в проекте см. в документации по клиенту Azure Identity для .NET.

Совет

Примеры использования Azure Identity для управления ресурсами Azure и доступа к ним см. в статье с примерами пакетов для Azure Identity, управления ресурсами и хранилища.

Сведения о проверке подлинности с помощью библиотек, которые не поддерживают Azure.Identity, см. в оставшейся части этого раздела.

Оценка ресурсов Azure

Для взаимодействия с ресурсами Azure, например при получении секрета из Key Vault или сохранении BLOB-объекта в хранилище, многим библиотекам служб Azure требуется строка подключения или ключи для проверки подлинности. Например, База данных SQL использует стандартную строку подключения SQL. Строки подключения службы используются в других службах Azure, таких как Cosmos DB, Кэш Azure для Redis и Служебная шина Azure. Эти строки можно получить, воспользовавшись порталом Azure, CLI или PowerShell. Также с помощью библиотек управления Azure для .NET можно выполнять запросы к ресурсам для создания строк подключения в коде.

Методы использования строки подключения зависят от продукта. См. документацию по продукту Azure.

Управление ресурсами Azure

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

Сначала войдите в Azure Cloud Shell. Убедитесь, что вы используете подписку, в которой будет создан субъект-служба.

az account show

Сведения о подписке отображаются.

{
  "environmentName": "AzureCloud",
  "id": "15dbcfa8-4b93-4c9a-881c-6189d39f04d4",
  "isDefault": true,
  "name": "my-subscription",
  "state": "Enabled",
  "tenantId": "43413cc1-5886-4711-9804-8cfea3d1c3ee",
  "user": {
    "cloudShellID": true,
    "name": "jane@contoso.com",
    "type": "user"
  }
}

Если вы вошли в неправильную подписку, введите az account set -s <name or ID of subscription>, чтобы выбрать правильную.

Создайте субъект-службу с помощью следующей команды:

az ad sp create-for-rbac --sdk-auth

Сведения о субъекте-службе отображаются в виде JSON.

{
  "clientId": "b52dd125-9272-4b21-9862-0be667bdf6dc",
  "clientSecret": "ebc6e170-72b2-4b6f-9de2-99410964d2d0",
  "subscriptionId": "ffa52f27-be12-4cad-b1ea-c2c241b6cceb",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Скопируйте и вставьте выходные данные JSON в текстовый редактор для последующего использования.

После создания субъекта-службы выполнить аутентификацию субъекта-службы для создания и администрирования ресурсов можно двумя способами.

Для обоих вариантов необходимо добавить следующие пакеты NuGet в проект.

Install-Package Microsoft.Azure.Management.Fluent
Install-Package Microsoft.Azure.Management.ResourceManager.Fluent

Аутентификация с использованием учетных данных токена

Первый способ — создание объекта учетных данных токена в коде. Учетные данные следует безопасно хранить в файле конфигурации, реестре или Azure Key Vault.

var credentials = SdkContext.AzureCredentialsFactory
    .FromServicePrincipal(clientId,
        clientSecret,
        tenantId,
        AzureEnvironment.AzureGlobalCloud);

При создании субъекта-службы используйте значения clientId, clientSecret и tenantId из выходных данных JSON.

Затем создайте точку входа объекта Azure, чтобы приступить к работе с API:

var azure = Microsoft.Azure.Management.Fluent.Azure
    .Configure()
    .Authenticate(credentials)
    .WithDefaultSubscription();

В объекте Azure рекомендуется явно указать subscriptionId из выходных данных JSON:

var azure = Microsoft.Azure.Management.Fluent.Azure
    .Configure()
    .Authenticate(credentials)
    .WithSubscription(subscriptionId);

Аутентификация на основе файла

Аутентификация на основе файла позволяет поместить учетные данные субъекта-службы в текстовый файл и защитить его в файловой системе.

Создайте текстовый файл с именем azureauth.json. При создании субъекта-службы вставьте выходные данные JSON.

Сохраните этот файл в безопасном расположении в вашей системе, доступном для кода. При помощи PowerShell установите переменную среды с именем AZURE_AUTH_LOCATION и указанием полного пути к файлу, например:

[Environment]::SetEnvironmentVariable("AZURE_AUTH_LOCATION", "C:\src\azureauth.json", "User")

Прочтите содержимое файла и создайте точку входа объекта Azure, чтобы приступить к работе с API:

// pull in the location of the authentication properties file from the environment
var credentials = SdkContext.AzureCredentialsFactory
    .FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"));

var azure = Microsoft.Azure.Management.Fluent.Azure
    .Configure()
    .Authenticate(credentials)
    .WithDefaultSubscription();