Упражнение. Реализация интерактивной проверки подлинности с помощью MSAL.NET

Завершено

В этом упражнении вы узнаете, как выполнить следующие действия:

  • Регистрация приложения на платформе идентификации Microsoft
  • Использование класса PublicClientApplicationBuilder в MSAL.NET
  • Интерактивное получение токена в консольном приложении

Необходимые условия

  • Учетная запись Azure с активной подпиской. Если у вас еще нет пробной версии, вы можете зарегистрироваться для бесплатной пробной версии на https://azure.com/free
  • Visual Studio Code. Вы можете установить Visual Studio Code из https://code.visualstudio.com.
  • Версия пакета SDK для .NET https://dotnet.microsoft.com/download/dotnet (6.0, 7.0 или 8.0)

Регистрация нового приложения

  1. Войдите на портал: https://portal.azure.com

  2. Найдите и выберите Microsoft Entra ID.

  3. В разделе Управлениевыберите Регистрации приложений>Новая регистрация.

  4. Когда появится страница регистрации приложения, введите сведения о регистрации приложения:

    Поле Ценность
    имя az204appreg
    Поддерживаемые типы учетных записей Выберите только учетные записи в этом каталоге организации
    URI перенаправления (необязательно) Выберите общедоступный клиент/собственное приложение (мобильное или настольное &) и введите http://localhost в правом поле.
  5. Выберите Зарегистрировать.

Microsoft Entra ID назначает уникальный идентификатор приложения (клиента) для вашего приложения, и вас перенаправят на страницу Обзор вашего приложения.

Настройка консольного приложения

  1. Запустите Visual Studio Code и откройте терминал, выбрав терминал, а затем новый терминал.

  2. Создайте папку для проекта и перейдите в нее.

    md az204-auth
    cd az204-auth
    
  3. Создайте консольное приложение .NET.

    dotnet new console
    
  4. Откройте папку az204-auth в Visual Studio Code.

    code . -r
    

Создание консольного приложения

В этом разделе описано, как добавить необходимые пакеты и код в проект.

Добавление пакетов и инструкций using

  1. Добавьте пакет Microsoft.Identity.Client в проект в терминале в Visual Studio Code.

    dotnet add package Microsoft.Identity.Client
    
  2. Откройте файл Program.cs и добавьте инструкции using для включения Microsoft.Identity.Client и активации асинхронных операций.

    using System.Threading.Tasks;
    using Microsoft.Identity.Client;
    
  3. Измените метод Main, чтобы включить асинхронный режим.

    public static async Task Main(string[] args)
    

Добавление кода для интерактивной проверки подлинности

  1. Для хранения идентификаторов приложения (client) и каталога (tenant) требуются две переменные. Эти значения можно скопировать из портала. Добавьте следующий код и замените строковые значения соответствующими значениями на портале.

    private const string _clientId = "APPLICATION_CLIENT_ID";
    private const string _tenantId = "DIRECTORY_TENANT_ID";
    
  2. Используйте класс PublicClientApplicationBuilder для создания контекста авторизации.

    var app = PublicClientApplicationBuilder
        .Create(_clientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
        .WithRedirectUri("http://localhost")
        .Build();
    
    Код Описание
    .Create Создает PublicClientApplicationBuilder из идентификатора клиента.
    .WithAuthority Добавляет известный авторитет, соответствующий серверу ADFS. В коде мы указываем общедоступное облако и используем арендатора для зарегистрированного приложения.

Получите маркер

При регистрации приложения az204appreg он автоматически создал разрешение API user.read для Microsoft Graph. Вы используете это разрешение, чтобы получить токен.

  1. Задайте область разрешений для запроса токена. Добавьте следующий код под PublicClientApplicationBuilder.

    string[] scopes = { "user.read" };
    
  2. Добавьте код для запроса токена и вывода результата в консоль.

    AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
    
    Console.WriteLine($"Token:\t{result.AccessToken}");
    

Проверка завершенного приложения

Содержимое файла Program.cs должно выглядеть следующим образом:

using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;

namespace az204_auth
{
    class Program
    {
        private const string _clientId = "APPLICATION_CLIENT_ID";
        private const string _tenantId = "DIRECTORY_TENANT_ID";

        public static async Task Main(string[] args)
        {
            var app = PublicClientApplicationBuilder
                .Create(_clientId)
                .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
                .WithRedirectUri("http://localhost")
                .Build(); 
            string[] scopes = { "user.read" };
            AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();

            Console.WriteLine($"Token:\t{result.AccessToken}");
        }
    }
}

Запуск приложения

  1. В терминале Visual Studio Code запустите dotnet build, чтобы проверить наличие ошибок, а затем dotnet run для запуска приложения.

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

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

    Выберите **Принять** для предоставления разрешения.

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

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....