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

Завершено

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

  • Регистрация приложения с помощью платформы удостоверений Майкрософт
  • использование класса PublicClientApplicationBuilder в MSAL.NET;
  • получение маркера интерактивно в консольном приложении.

Необходимые компоненты

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

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

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

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

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

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

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

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

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

  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. Для хранения идентификаторов приложений (клиента) и каталогов (клиента) требуется две переменные. Эти значения можно скопировать на портале. Добавьте следующий код и замените строковые значения соответствующими значениями на портале.

    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 из clientID.
    .WithAuthority Добавляет известный центр, соответствующий серверу ADFS. В коде мы указываем общедоступное облако и используем клиент для зарегистрированного приложения.

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

При регистрации приложения az204appreg он автоматически создал разрешение user.read API для 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. Если это первый раз, когда вы выполнили проверку подлинности в зарегистрированном приложении, вы получили запрошенное уведомление о разрешениях с просьбой утвердить приложение для чтения данных, связанных с вашей учетной записью. Выберите Принять.

    Select **Accept** to grant the permission.

  4. Результаты должны быть похожи на приведенный ниже пример в консоли.

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....