Прочитать на английском

Поделиться через


Дополнительные методы проверки подлинности в ресурсах Azure из приложений .NET

В этой статье перечислены дополнительные методы, которые могут использоваться для проверки подлинности в ресурсах Azure. Методы на этой странице реже используются; По возможности используйте один из методов, описанных в проверке подлинности приложений .NET в Azure с помощью обзора пакета SDK Azure.

интерактивная аутентификация через браузер;

Этот метод интерактивно проходит проверку подлинности приложения InteractiveBrowserCredential , собирая учетные данные пользователя в системе по умолчанию.

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

Включение приложений для интерактивной проверки подлинности браузера

Выполните следующие действия, чтобы разрешить приложению проходить проверку подлинности через интерактивный поток браузера. Эти действия также работают для потока проверки подлинности кода устройства, описанного далее. Этот процесс необходим только при использовании InteractiveBrowserCredential в коде.

  1. В портал Azure перейдите к идентификатору Microsoft Entra и выберите Регистрация приложений в области навигации слева.

  2. Выберите регистрацию приложения, а затем выберите проверку подлинности.

  3. В разделе "Дополнительные параметры" выберите "Да", чтобы разрешить потоки общедоступных клиентов.

  4. Выберите Сохранить, чтобы применить изменения.

  5. Чтобы авторизовать приложение для определенных ресурсов, перейдите к ресурсу, найдите вопрос, выберите разрешения API и включите Microsoft Graph и другие ресурсы, к которым вы хотите получить доступ. Microsoft Graph обычно включен по умолчанию.

    Важно!

    Вы также должны быть администратором вашего клиента, чтобы предоставить согласие приложению при первом входе.

Пример использования InteractiveBrowserCredential

В следующем примере показано использование проверки подлинности с помощью InteractiveBrowserCredential BlobServiceClient:

C#
using Azure.Identity;
using Azure.Storage.Blobs;

namespace InteractiveBrokeredAuthSample
{
    public partial class InteractiveBrowserAuth : Form
    {
        public InteractiveBrowserAuth()
        {
            InitializeComponent();
        }

        private void testInteractiveBrowserAuth_Click(object sender, EventArgs e)
        {
            var client = new BlobServiceClient(
                new Uri("https://<storage-account-name>.blob.core.windows.net"),
                new InteractiveBrowserCredential());

            foreach (var blobItem in client.GetBlobContainers())
            {
                Console.WriteLine(blobItem.Name);
            }
        }
    }
}

Для более точного элемента управления, например задания URI перенаправления, можно указать конкретные аргументы InteractiveBrowserCredential , redirect_uriнапример.

Интерактивная проверка подлинности с помощью брокера

Этот метод интерактивно проходит проверку подлинности приложения InteractiveBrowserCredential , собирая учетные данные пользователя с помощью брокера системной проверки подлинности. Брокер проверки подлинности системы — это приложение, работающее на компьютере пользователя, которое управляет подтверждением проверки подлинности и обслуживанием маркеров для всех подключенных учетных записей. В настоящее время поддерживается только брокер проверка подлинности Windows, диспетчер веб-учетных записей (WAM). Пользователи в macOS и Linux будут проходить проверку подлинности с помощью интерактивного потока браузера, отличного от брокера.

WAM позволяет поставщикам удостоверений, таким как идентификатор Microsoft Entra, в собственном коде подключаться к ОС и предоставлять службу другим приложениям, чтобы обеспечить более безопасный процесс входа. WAM предлагает следующие преимущества:

  • Поддержка функций. Приложения могут получать доступ к возможностям уровня ОС и уровня обслуживания, включая Windows Hello, политики условного доступа и ключи FIDO.
  • Упрощенный единый вход. Приложения могут использовать встроенный средство выбора учетных записей, позволяя пользователю выбрать существующую учетную запись вместо многократного ввода одних и того же учетных данных.
  • Улучшенная безопасность: исправления ошибок и улучшения, отправляемые в Windows.
  • Защита маркеров: маркеры обновления привязаны к устройству, и приложения могут получать маркеры доступа, привязанные к устройству.

Интерактивная проверка подлинности с брокером позволяет приложению выполнять все операции, разрешенные интерактивными учетными данными для входа. Поддерживаются личные учетные записи Майкрософт и рабочие или учебные учетные записи. Если используется поддерживаемая версия Windows, пользовательский интерфейс на основе браузера по умолчанию заменяется более плавной проверкой подлинности, аналогично встроенным приложениям Windows.

Включение приложений для интерактивной проверки подлинности с помощью брокера

Выполните следующие действия, чтобы разрешить приложению проходить проверку подлинности через интерактивный поток брокера.

  1. В портал Azure перейдите к идентификатору Microsoft Entra и выберите Регистрация приложений в меню слева.

  2. Выберите регистрацию приложения, а затем выберите проверку подлинности.

  3. Добавьте URI перенаправления WAM в регистрацию приложения с помощью конфигурации платформы:

    1. В разделе "Конфигурации платформы" выберите + Добавить платформу.

    2. В разделе "Настройка платформ" выберите плитку для типа приложения (платформы), чтобы настроить его параметры, такие как мобильные и классические приложения.

    3. В пользовательских URI перенаправления введите следующий URI перенаправления WAM:

      text
      ms-appx-web://microsoft.aad.brokerplugin/{client_id}
      

      Заполнитель {client_id} должен быть заменен идентификатором приложения (клиента), указанным на панели обзора регистрации приложения.

    4. Выберите Настроить.

    Дополнительные сведения см. в разделе "Добавление URI перенаправления" в регистрацию приложения.

  4. Вернитесь на панель проверки подлинности в разделе "Дополнительные параметры" выберите "Да", чтобы разрешить потоки общедоступного клиента.

  5. Выберите Сохранить, чтобы применить изменения.

  6. Чтобы авторизовать приложение для определенных ресурсов, перейдите к ресурсу, найдите вопрос, выберите разрешения API и включите Microsoft Graph и другие ресурсы, к которым вы хотите получить доступ. Microsoft Graph обычно включен по умолчанию.

    Важно!

    Вы также должны быть администратором вашего клиента, чтобы предоставить согласие приложению при первом входе.

Пример использования InteractiveBrowserCredential

В следующем примере показано использование приложения Windows Forms для проверки подлинности с помощью InteractiveBrowserCredential BlobServiceClient:

C#
using Azure.Identity;
using Azure.Identity.Broker;
using Azure.Storage.Blobs;

namespace InteractiveBrokeredAuthSample
{
    public partial class InteractiveBrokeredAuth : Form
    {
        public InteractiveBrokeredAuth()
        {
            InitializeComponent();
        }

        private void testInteractiveBrokeredAuth_Click(object sender, EventArgs e)
        {
            // Get the handle of the current window
            IntPtr windowHandle = this.Handle;

            var credential = new InteractiveBrowserCredential(
                new InteractiveBrowserCredentialBrokerOptions(windowHandle));

            // To authenticate and authorize with an Entra ID app registration, substitute the
            // <app_id> and <tenant_id> placeholders with the values for your app and tenant.
            // var credential = new InteractiveBrowserCredential(
            //    new InteractiveBrowserCredentialBrokerOptions(windowHandle)
            //        { 
            //            TenantId = "your-tenant-id",
            //            ClientId = "your-client-id"
            //        }
            // );

            var client = new BlobServiceClient(
                new Uri("https://<storage-account-name>.blob.core.windows.net/"),
                credential
            );

            // Prompt for credentials appears on first use of the client
            foreach (var container in client.GetBlobContainers())
            {
                Console.WriteLine(container.Name);
            }
        }
    }
}

Примечание

Дополнительные сведения о извлечении дескрипторов окна см. в дескрипторах родительского окна и получении сведений о дескрипторах окна.

Для успешного выполнения кода учетная запись пользователя должна быть назначена роль Azure в учетной записи хранения, которая позволяет получить доступ к контейнерам BLOB-объектов, таким как участник данных учетной записи хранения. Если указано приложение, оно должно иметь разрешения API для user_impersonation Access служба хранилища Azure (шаг 6 в предыдущем разделе). Это разрешение API позволяет приложению получить доступ к хранилищу Azure от имени пользователя, выполнившего вход после предоставления согласия во время входа.

На следующем снимке экрана показан интерфейс входа пользователя:

Снимок экрана, на котором показан интерфейс входа при использовании учетных данных брокера интерактивных браузеров для проверки подлинности пользователя.

Проверка подлинности учетной записи системы по умолчанию с помощью WAM

Многие пользователи всегда войдите в Windows с одной учетной записью пользователя и, следовательно, только когда-либо хотите пройти проверку подлинности с помощью этой учетной записи. WAM и InteractiveBrowserCredential также поддерживает автоматический процесс входа, который автоматически использует учетную запись по умолчанию, чтобы пользователь не должен многократно выбирать его.

В следующем примере показано, как включить вход с помощью системной учетной записи по умолчанию:

C#
using Azure.Identity;
using Azure.Identity.Broker;
using Azure.Storage.Blobs;

namespace InteractiveBrokeredAuthSample
{
    public partial class SilentBrokeredAuth : Form
    {
        public SilentBrokeredAuth()
        {
            InitializeComponent();
        }

        private void testSilentBrokeredAuth_Click(object sender, EventArgs e)
        {
            // Get the handle of the current window
            IntPtr windowHandle = this.Handle;

            var credential = new InteractiveBrowserCredential(
                new InteractiveBrowserCredentialBrokerOptions(windowHandle)
                {
                    // Enable silent brokered authentication using the default account
                    UseDefaultBrokerAccount = true,
                });

            // To authenticate and authorize with an app, substitute the
            // <app_id> and <tenant_id> placeholders with the values for your app and tenant.
            // var credential = new InteractiveBrowserCredential(
            //    new InteractiveBrowserCredentialBrokerOptions(windowHandle)
            //        { 
            //            TenantId = "your-tenant-id",
            //            ClientId = "your-client-id"
            //        }
            // );

            var client = new BlobServiceClient(
                new Uri("https://<storage-account-name>.blob.core.windows.net/"),
                credential
            );

            // Prompt for credentials appears on first use of the client
            foreach (var container in client.GetBlobContainers())
            {
                Console.WriteLine(container.Name);
            }
        }
    }
}

После этого учетные данные пытаются войти, запрашивая базовую библиотеку проверки подлинности Майкрософт (MSAL), чтобы выполнить вход для системной учетной записи по умолчанию. Если вход завершается ошибкой, учетные данные возвращаются к отображению диалогового окна выбора учетной записи, из которого пользователь может выбрать соответствующую учетную запись.

аутентификация с помощью кода устройства;

Этот метод интерактивно выполняет проверку подлинности пользователя на устройствах с ограниченным пользовательским интерфейсом (обычно устройства без клавиатуры):

  1. Когда приложение пытается пройти проверку подлинности, учетные данные запрашивают у пользователя URL-адрес и код проверки подлинности.
  2. Пользователь посещает URL-адрес на отдельном устройстве с поддержкой браузера (компьютер, смартфон и т. д.) и вводит код.
  3. Пользователь следует обычному процессу проверки подлинности в браузере.
  4. После успешной проверки подлинности приложение проходит проверку подлинности на устройстве.

Дополнительные сведения см. в статье Платформа удостоверений Майкрософт и поток предоставления авторизации устройства OAuth 2.0.

Проверка подлинности кода устройства в среде разработки позволяет приложению выполнять все операции, разрешенные учетными данными интерактивного входа. В результате, если вы являетесь владельцем или администратором подписки, код имеет собственный доступ к большинству ресурсов в этой подписке, не назначая какие-либо определенные разрешения. Однако этот метод можно использовать с определенным идентификатором клиента, а не по умолчанию, для которого можно назначить определенные разрешения.

Проверка подлинности по имени пользователя и с помощью пароля

Этот метод проверяет подлинность приложения с использованием ранее собранных учетных данных и объекта UsernamePasswordCredential .

Важно!

Этот метод проверки подлинности не рекомендуется, так как он менее безопасный, чем другие потоки. Кроме того, этот метод не является интерактивным и поэтому несовместим с любой формой многофакторной проверки подлинности или запроса согласия. Приложение должно иметь согласие от пользователя или администратора каталога.

Кроме того, этот метод проверяет подлинность только рабочих и учебных учетных записей; Учетные записи Майкрософт не поддерживаются. Дополнительные сведения см. в статье "Регистрация организации для использования идентификатора Microsoft Entra".

C#
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;

string clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID")!;
string tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID")!;
string username = Environment.GetEnvironmentVariable("AZURE_USERNAME")!;
string password = Environment.GetEnvironmentVariable("AZURE_PASSWORD")!;

BlobServiceClient client = new(
    new Uri("https://<storage-account-name>.blob.core.windows.net"),
    new UsernamePasswordCredential(username, password, tenantId, clientId));

foreach (BlobContainerItem blobItem in client.GetBlobContainers())
{
    Console.WriteLine(blobItem.Name);
}