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


Настройка проверки подлинности в примере классического приложения WPF с помощью Azure AD B2C

Это важно

Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".

В этой статье используется пример классического приложения Windows Presentation Foundation (WPF) для иллюстрации добавления проверки подлинности Azure Active Directory B2C (Azure AD B2C) в классические приложения.

Обзор

OpenID Connect (OIDC) представляет собой протокол проверки подлинности, основанный на OAuth 2.0. Вы можете использовать OIDC для безопасного входа пользователей в приложение. В этом примере классического приложения используется библиотека проверки подлинности Майкрософт (MSAL) с потоком проверки подлинности OIDC для потока проверки подлинности Для Exchange (PKCE). MSAL — это библиотека, предоставляемая Корпорацией Майкрософт, которая упрощает добавление поддержки проверки подлинности и авторизации в классические приложения.

Поток входа включает следующие действия.

  1. Пользователи открывают приложение и выбирают вход.
  2. Приложение открывает системный браузер классического устройства и запускает запрос проверки подлинности в Azure AD B2C.
  3. Пользователи зарегистрируются или войдут в систему, сбросят пароль или войдут с помощью социальной учетной записи.
  4. После успешного входа пользователей Azure AD B2C возвращает код авторизации приложению.
  5. Приложение выполняет следующие действия:
    1. Он меняет код авторизации на токен идентификатора, токен доступа и токен обновления.
    2. Он считывает информацию токена идентификатора.
    3. Он сохраняет маркеры в кэше в памяти для последующего использования.

Обзор регистрации приложения

Чтобы включить вход приложения в Azure AD B2C и вызвать веб-API, зарегистрируйте два приложения в каталоге Azure AD B2C.

  • Регистрация классического приложения позволяет приложению войти в систему с помощью Azure AD B2C. Во время регистрации приложения укажите универсальный код ресурса (URI перенаправления). URI перенаправления — это конечная точка, в которую пользователи перенаправляются Azure AD B2C после проверки подлинности с помощью Azure AD B2C. Процесс регистрации приложения создает идентификатор приложения, также известный как идентификатор клиента, который однозначно идентифицирует классическое приложение (например, идентификатор приложения: 1).

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

Регистрация и архитектура приложения показаны на следующих схемах:

Схема классического приложения с веб-API, регистрациями и маркерами.

Вызов веб-API-интерфейса

После завершения проверки подлинности пользователи взаимодействуют с приложением, которое вызывает защищенный веб-API. Этот веб-API использует проверку подлинности посредством маркера носителя. Маркер носителя — это маркер доступа, полученный приложением от Azure AD B2C. Приложение передает маркер в заголовке авторизации HTTPS-запроса.

Authorization: Bearer <access token>

Если область действия токена доступа не соответствует областям веб-API, библиотека аутентификации получает новый токен доступа с правильными областями.

Поток выхода

Процесс выхода из системы включает следующие шаги:

  1. Пользователи выходят из приложения.
  2. Приложение очищает объекты сеанса, а библиотека проверки подлинности очищает свой кэш маркеров.
  3. Приложение перенаправляет пользователя в конечную точку выхода Azure AD B2C, чтобы завершить сеанс Azure AD B2C.
  4. Пользователи перенаправляются обратно в приложение.

Предпосылки

Компьютер под управлением Visual Studio 2019 с разработкой классических приложений .NET.

Шаг 1. Настройка потока пользователя

Если пользователи пытаются войти в приложение, оно инициирует запрос проверки подлинности к конечной точке авторизации через поток пользователя. Соответствующий поток пользователя определяет и контролирует взаимодействие с пользователем. Когда пользователи завершают пользовательский поток, Azure AD B2C создает токен и перенаправляет пользователей обратно в ваше приложение.

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

  • Объединенный пользовательский поток входа и регистрации, например susi. Этот пользовательский поток также поддерживает функцию Забыли пароль?.
  • Последовательность действий пользователя для редактирования профиля, например edit_profile.
  • Процесс сброса пароля, например reset_password.

Azure AD B2C добавляет B2C_1_ в начало имени пользовательского потока. Например, susi преобразуется в B2C_1_susi.

Шаг 2. Регистрация приложений

Создайте классическое приложение и регистрацию веб-API и укажите области веб-API.

Шаг 2.1. Регистрация веб-приложения API

Чтобы создать регистрацию приложения веб-API (идентификатор приложения: 2), выполните следующие действия.

  1. Войдите на портал Azure.

  2. Убедитесь, что вы используете каталог, содержащий арендатора Azure AD B2C. На панели инструментов портала выберите значок Каталоги и подписки.

  3. В настройках портала на странице Каталоги и подписки найдите свой каталог Azure AD B2C в списке Имя каталога и выберите Переключить.

  4. В портале Azure найдите и выберите Azure AD B2C.

  5. Выберите регистрации приложений и нажмите кнопку "Создать регистрацию".

  6. В поле Имя введите имя приложения (например, my-api1). Оставьте значения по умолчанию для URI перенаправления и поддерживаемых типов учетных записей.

  7. Выберите Зарегистрировать.

  8. Когда регистрация приложения завершится, выберите Обзор.

  9. Запишите значение идентификатора приложения (клиента) для дальнейшего использования при настройке веб-приложения.

    Снимок экрана, демонстрирующий, как получить идентификатор приложения веб-API

Шаг 2.2. Настройка областей веб-API

  1. Выберите созданное приложение my-api1 (идентификатор приложения: 2), чтобы открыть страницу Обзор.

  2. В разделе "Управление" выберите "Предоставить API".

  3. Рядом с полем URI идентификатора приложения щелкните ссылку Задать. Замените значение по умолчанию (уникальный идентификатор) уникальным именем (например, tasks-api), а затем нажмите Сохранить.

    Когда веб-приложение запрашивает маркер доступа для веб-API, оно должно добавить этот URI в качестве префикса для каждой области, определяемой для API.

  4. В разделе "Области", определенные этим API, выберите "Добавить область".

  5. Чтобы создать область, определяющую доступ для чтения к API, сделайте следующее.

    1. В поле Имя области введите tasks.read.
    2. В качестве отображаемого имени согласия администратора укажите Доступ на чтение к API задач.
    3. В качестве описания согласия администратора введите Предоставляет доступ на чтение к API задач.
  6. Выберите "Добавить область".

  7. Выберите Добавить область и добавьте область, определяющую доступ для записи к API:

    1. В поле Имя области введите tasks.write.
    2. В качестве отображаемого имени согласия администратора укажите Право записи для API задач.
    3. В качестве описания согласия администратора введите Предоставляет доступ для записи к API задач.
  8. Выберите "Добавить область".

Шаг 2.3. Регистрация классического приложения

Чтобы создать регистрацию классических приложений, сделайте следующее:

  1. Войдите на портал Azure.
  2. Выберите регистрации приложений и нажмите кнопку "Создать регистрацию".
  3. В разделе "Имя" введите имя приложения (например, desktop-app1).
  4. В разделе "Поддерживаемые типы учетных записей" выберите "Учетные записи" в любом поставщике удостоверений или каталоге организации (для проверки подлинности пользователей с помощью потоков пользователей).
  5. В разделе URI перенаправления выберите общедоступный клиент или собственный (настольный компьютер и рабочий стол), а затем в поле URL-адреса введите https://your-tenant-name.b2clogin.com/oauth2/nativeclient. Замените your-tenant-nameименем клиента. Дополнительные параметры см. в разделе "Настройка URI перенаправления".
  6. Выберите Зарегистрировать.
  7. Когда регистрация приложения завершится, выберите Обзор.
  8. Запишите идентификатор приложения (клиента) для последующего использования при настройке классического приложения. Снимок экрана: идентификатор классического приложения.

Шаг 2.4. Предоставление разрешений классического приложения для веб-API

Чтобы предоставить своему приложению (идентификатор приложения: 1) разрешения, выполните следующие действия.

  1. Выберите Регистрация приложений, а затем выберите созданное вами приложение (идентификатор приложения: 1).

  2. В разделе Управление выберите Разрешения API.

  3. В разделе Настроенные разрешения выберите Добавить разрешение.

  4. Выберите вкладку Мои API.

  5. Выберите API (идентификатор приложения: 2), к которому веб-приложению должен быть предоставлен доступ. Например, введите my-api1.

  6. Под Разрешение разверните tasks, а затем выберите ранее определенные области (например, tasks.read и tasks.write).

  7. Выберите Добавить разрешения.

  8. Выберите Предоставить согласие администратора для <имя арендатора>.

  9. Выберите Да.

  10. Выберите Обновить, а затем убедитесь, что Разрешено для... отображается в разделе Состояние для обеих областей.

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

    Снимок экрана настроенной панели разрешений, показывающий, что разрешения на чтение предоставлены

Шаг 3. Настройка примера веб-API

Этот пример получает маркер доступа с соответствующими областями, которые классическое приложение может использовать для веб-API. Чтобы вызвать веб-API из кода, сделайте следующее:

  1. Используйте существующий веб-API или создайте новый. Дополнительные сведения см. в статье "Включение проверки подлинности в собственном веб-API" с помощью Azure AD B2C.
  2. После настройки веб-API скопируйте URI конечной точки веб-API. Вы будете использовать конечную точку веб-API в следующих шагах.

Подсказка

Если у вас нет веб-API, вы по-прежнему можете запустить этот пример. В этом случае приложение возвращает маркер доступа, но не сможет вызывать веб-API.

Шаг 4. Получение примера классического приложения WPF

  1. Скачайте файл .zip или клонируйте пример веб-приложения из репозитория GitHub.

    git clone https://github.com/Azure-Samples/active-directory-b2c-dotnet-desktop.git
    
  2. Откройте решение active-directory-b2c-wpf ( файл active-directory-b2c-wpf.sln ) в Visual Studio.

Шаг 5. Настройка примера классического приложения

В проекте active-directory-b2c-wpf откройте файл App.xaml.cs . Члены класса содержат информацию о вашем поставщике идентификационных данных Azure AD B2C. Классическое приложение использует эти сведения для установления отношения доверия с Azure AD B2C, входа пользователей и выхода, получения маркеров и проверки их.

Обновите следующие члены класса:

Ключ Ценность
TenantName Первая часть имени арендатора в Azure AD B2C tenant name (например, contoso.b2clogin.com).
ClientId Идентификатор классического приложения из шага 2.3.
PolicySignUpSignIn Поток регистрации или входа или настраиваемая политика, созданная на шаге 1.
PolicyEditProfile Поток редактирования профиля пользователя или настраиваемая политика, созданная на шаге 1.
ApiEndpoint (Необязательно) Конечная точка веб-API, созданная на шаге 3 (например, https://contoso.azurewebsites.net/hello).
ApiScopes Области веб-API, созданные на шаге 2.4.

Окончательный App.xaml.cs файл должен выглядеть следующим кодом C#:

public partial class App : Application
{

private static readonly string TenantName = "contoso";
private static readonly string Tenant = $"{TenantName}.onmicrosoft.com";
private static readonly string AzureAdB2CHostname = $"{TenantName}.b2clogin.com";
private static readonly string ClientId = "<web-api-app-application-id>";
private static readonly string RedirectUri = $"https://{TenantName}.b2clogin.com/oauth2/nativeclient";

public static string PolicySignUpSignIn = "b2c_1_susi";
public static string PolicyEditProfile = "b2c_1_edit_profile";
public static string PolicyResetPassword = "b2c_1_reset";

public static string[] ApiScopes = { $"https://{Tenant}//api/tasks.read" };
public static string ApiEndpoint = "https://contoso.azurewebsites.net/hello";

Шаг 6. Запуск и тестирование классического приложения

  1. Восстановите пакеты NuGet.

  2. Выберите F5, чтобы создать и запустить пример.

  3. Выберите "Войти", а затем зарегистрируйтесь или войдите с помощью локальной или социальной учетной записи Azure AD B2C.

    Снимок экрана, на котором показано, как запустить поток входа.

  4. После успешной регистрации или входа в систему на нижней панели приложения WPF отображаются сведения о маркере.

    Снимок экрана: маркер доступа Azure AD B2C и идентификатор пользователя.

  5. Выберите API вызова для вызова веб-API.

Дальнейшие шаги

Узнайте, как настроить параметры проверки подлинности в классическом приложении WPF с помощью Azure AD B2C.