Упражнение. Реализация интерактивной проверки подлинности с помощью 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)
Регистрация нового приложения
Войдите на портал: https://portal.azure.com
Найдите и выберите Microsoft Entra ID.
В разделе Управлениевыберите Регистрации приложений>Новая регистрация.
Когда появится страница регистрации приложения, введите сведения о регистрации приложения:
Поле Ценность имя az204appreg
Поддерживаемые типы учетных записей Выберите только учетные записи в этом каталоге организации URI перенаправления (необязательно) Выберите общедоступный клиент/собственное приложение (мобильное или настольное &) и введите http://localhost
в правом поле.Выберите Зарегистрировать.
Microsoft Entra ID назначает уникальный идентификатор приложения (клиента) для вашего приложения, и вас перенаправят на страницу Обзор вашего приложения.
Настройка консольного приложения
Запустите Visual Studio Code и откройте терминал, выбрав терминал, а затем новый терминал.
Создайте папку для проекта и перейдите в нее.
md az204-auth cd az204-auth
Создайте консольное приложение .NET.
dotnet new console
Откройте папку az204-auth в Visual Studio Code.
code . -r
Создание консольного приложения
В этом разделе описано, как добавить необходимые пакеты и код в проект.
Добавление пакетов и инструкций using
Добавьте пакет
Microsoft.Identity.Client
в проект в терминале в Visual Studio Code.dotnet add package Microsoft.Identity.Client
Откройте файл Program.cs и добавьте инструкции
using
для включенияMicrosoft.Identity.Client
и активации асинхронных операций.using System.Threading.Tasks; using Microsoft.Identity.Client;
Измените метод Main, чтобы включить асинхронный режим.
public static async Task Main(string[] args)
Добавление кода для интерактивной проверки подлинности
Для хранения идентификаторов приложения (client) и каталога (tenant) требуются две переменные. Эти значения можно скопировать из портала. Добавьте следующий код и замените строковые значения соответствующими значениями на портале.
private const string _clientId = "APPLICATION_CLIENT_ID"; private const string _tenantId = "DIRECTORY_TENANT_ID";
Используйте класс
PublicClientApplicationBuilder
для создания контекста авторизации.var app = PublicClientApplicationBuilder .Create(_clientId) .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId) .WithRedirectUri("http://localhost") .Build();
Код Описание .Create
Создает PublicClientApplicationBuilder
из идентификатора клиента..WithAuthority
Добавляет известный авторитет, соответствующий серверу ADFS. В коде мы указываем общедоступное облако и используем арендатора для зарегистрированного приложения.
Получите маркер
При регистрации приложения az204appreg он автоматически создал разрешение API user.read
для Microsoft Graph. Вы используете это разрешение, чтобы получить токен.
Задайте область разрешений для запроса токена. Добавьте следующий код под
PublicClientApplicationBuilder
.string[] scopes = { "user.read" };
Добавьте код для запроса токена и вывода результата в консоль.
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}");
}
}
}
Запуск приложения
В терминале Visual Studio Code запустите
dotnet build
, чтобы проверить наличие ошибок, а затемdotnet run
для запуска приложения.Приложение открывает браузер по умолчанию, предлагая выбрать учетную запись, с которой вы хотите пройти проверку подлинности. Если в списке несколько учетных записей выберите один, связанный с клиентом, используемым в приложении.
Если это первый раз, когда вы проходите аутентификацию в зарегистрированном приложении, вы получите уведомление "Запрос разрешений" с просьбой одобрить приложение для чтения данных, связанных с вашей учетной записью. Выберите Принять.
В консоли должны отобразиться результаты, аналогичные приведенному ниже.
Token: eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....