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


Настройка проверки подлинности в примере веб-приложения, которое вызывает веб-API с помощью Azure AD B2C

Это важно

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

В этой статье используется пример веб-приложения ASP.NET, которое вызывает веб-API для иллюстрации добавления проверки подлинности Azure Active Directory B2C (Azure AD B2C) в веб-приложения.

Это важно

Пример веб-приложения ASP.NET, на которое ссылается в этой статье, используется для вызова веб-API с маркером носителя. Веб-приложение, которое не вызывает веб-API, см. в статье Настройка проверки подлинности в примере веб-приложения с помощью Azure AD B2C.

Обзор

OpenID Connect (OIDC) представляет собой протокол проверки подлинности, основанный на OAuth 2.0. Вы можете использовать OIDC для безопасного входа пользователя в приложение. В этом примере веб-приложения используется Веб-сайт удостоверений Майкрософт. Microsoft Identity Web — это набор библиотек ASP.NET Core, которые упрощают добавление поддержки проверки подлинности и авторизации в веб-приложения, которые могут вызывать безопасный веб-API.

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

  1. Пользователи переходят к веб-приложению и выбирают Вход.

  2. Приложение инициирует запрос на проверку подлинности и перенаправляет пользователей в Azure AD B2C.

  3. Пользователи регистрируются или входят в систему и сбрасывают пароль. Либо они могут использовать для входа учетную запись социальной сети.

  4. После входа пользователей Azure AD B2C возвращает приложению код авторизации.

  5. Затем приложение выполняет следующие действия:

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

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

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

  • Регистрация веб-приложения позволяет приложению выполнять вход с помощью Azure AD B2C. Во время регистрации вы указываете URI перенаправления. URI перенаправления — это конечная точка, в которую пользователи перенаправляются службой Azure AD B2C после завершения проверки подлинности с помощью Azure AD B2C. В процессе регистрации приложения создается идентификатор приложения, который также называется идентификатором клиента. Он однозначно идентифицирует ваше приложение. Кроме того, создается секрет клиента, который используется приложением для безопасного получения маркеров.

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

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

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

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

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

Authorization: Bearer <access token>

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

Выход

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

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

Предпосылки

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

Шаг 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. Выберите регистрации приложений и нажмите кнопку "Создать регистрацию".

  2. В разделе "Имя" введите имя приложения (например, webapp1).

  3. В разделе "Поддерживаемые типы учетных записей" выберите "Учетные записи" в любом поставщике удостоверений или каталоге организации (для проверки подлинности пользователей с помощью потоков пользователей).

  4. В поле URI перенаправления выберите Интернет и введите https://localhost:5000/signin-oidc в поле URL-адреса.

  5. В разделе Разрешения установите флажок Предоставьте согласие администратора для разрешений openid и offline_access.

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

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

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

    Снимок экрана: страница обзора веб-приложения для записи идентификатора веб-приложения.

Шаг 2.4. Создание секрета клиента веб-приложения

Создайте секрет клиента для зарегистрированного веб-приложения. Веб-приложение использует секрет клиента для подтверждения своей подлинности при запросе токенов.

  1. В разделе Управление, выберите Сертификаты и секреты.
  2. Выберите новый секрет клиента.
  3. В поле "Описание " введите описание секрета клиента (например, clientecret1).
  4. В разделе Истекает выберите срок действия секрета, а затем выберите Добавить.
  5. Запишите значение секрета. Это значение будет использоваться для настройки на следующем шаге.

Шаг 2.5. Предоставление разрешений веб-приложения для веб-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. Получение примера веб-приложения

Скачайте ZIP-файл или выполните следующую команду Bash, чтобы клонировать пример веб-приложения из GitHub.

git clone https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2

Извлеките предоставленный для примера файл в папку, где общая длина пути не превышает 260 символов.

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

В папке примера в папке 4-WebApp-your-API/4-2-B2C/TodoListService откройте проект TodoListService.csproj с помощью Visual Studio или Visual Studio Code.

В корневой папке проекта откройте файл appsettings.json. Этот файл содержит сведения о поставщике удостоверений Azure AD B2C. Приложение веб-API использует эту информацию для проверки токена доступа, который веб-приложение передает в качестве токена-носителя. Обновите следующие свойства параметров приложения:

Секция Ключ Ценность
AzureAdB2C Пример Первая часть имени клиента Azure AD B2C. Например: https://contoso.b2clogin.com.
AzureAdB2C Домен Полное имя клиента Azure AD B2C. Например: contoso.onmicrosoft.com.
AzureAdB2C ClientId Идентификатор приложения веб-API из шага 2.1.
AzureAdB2C ИдентификаторПолитикиРегистрацииИВхода Потоки пользователей или настраиваемая политика из шага 1.

Окончательный файл конфигурации должен выглядеть следующим образом:

{
  "AzureAdB2C": {
    "Instance": "https://contoso.b2clogin.com",
    "Domain": "contoso.onmicrosoft.com",
    "ClientId": "<web-api-app-application-id>",
    "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
    "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
  },
  // More settings here
}

Шаг 4.1. Настройка политики разрешений

Веб-API проверяет, прошел ли пользователь проверку подлинности с помощью маркера носителя, а маркер носителя имеет настроенные допустимые области. Если маркер носителя не имеет каких-либо из этих принятых областей, веб-API возвращает код состояния HTTP 403 (запрещено) и записывает в текст ответа сообщение, указывающее, какие области ожидаются в маркере.

Чтобы настроить принятые области, откройте Controller/TodoListController.cs класс и задайте имя области без полного URI.

[RequiredScope("tasks.read")]

Шаг 4.2. Запуск примера веб-ПРИЛОЖЕНИЯ API

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

  1. Если вам будет предложено сделать это, восстановите зависимости.
  2. Соберите проект и запустите его.
  3. После создания проекта Visual Studio или Visual Studio Code запускает веб-API в браузерах со следующим адресом: https://localhost:44332.

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

В папке примера в папке 4-WebApp-your-API/4-2-B2C/Client откройте проект TodoListClient.csproj с помощью Visual Studio или Visual Studio Code.

В корневой папке проекта откройте appsettings.json файл. Этот файл содержит сведения о поставщике удостоверений Azure AD B2C. Веб-приложение использует эти сведения для установления отношения доверия с Azure AD B2C, входа пользователей и выхода, получения маркеров и проверки их. Обновите следующие свойства параметров приложения:

Секция Ключ Ценность
AzureAdB2C Пример Первая часть имени арендатора в Azure AD B2C tenant name (например, https://contoso.b2clogin.com).
AzureAdB2C Домен Полное имя клиента Azure AD B2C (например, contoso.onmicrosoft.com).
AzureAdB2C ClientId Идентификатор веб-приложения из шага 2.3.
AzureAdB2C Секрет клиента Секрет веб-приложения из шага 2.4.
AzureAdB2C ИдентификаторПолитикиРегистрацииИВхода Потоки пользователя или настраиваемая политика, созданная на шаге 1.
Список дел TodoListScope (Список дел) Области веб-API, созданные на шаге 2.5.
Список дел TodoListBaseAddress Базовый универсальный код ресурса (URI) веб-API (например https://localhost:44332).

Окончательный файл конфигурации должен выглядеть следующим образом в формате JSON:

{
  "AzureAdB2C": {
    "Instance": "https://contoso.b2clogin.com",
    "Domain": "contoso.onmicrosoft.com",
    "ClientId": "<web-app-application-id>",
    "ClientSecret": "<web-app-application-secret>",  
    "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
    "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
  },
  "TodoList": {
    "TodoListScope": "https://contoso.onmicrosoft.com/api/demo.read",
    "TodoListBaseAddress": "https://localhost:44332"
  }
}

Шаг 6. Запуск примера веб-приложения

  1. Соберите проект и запустите его.
  2. Перейдите по ссылке https://localhost:5000.
  3. Завершите процесс регистрации или входа в систему.

После успешной проверки подлинности вы увидите отображаемое имя на панели навигации. Чтобы просмотреть утверждения, возвращаемые маркером Azure AD B2C, выберите TodoList.

Снимок экрана: утверждения маркера веб-приложения.

Развертывание приложения

В рабочем приложении универсальный код ресурса (URI) перенаправления регистрации приложений обычно является общедоступной конечной точкой, в которой работает ваше приложение, например https://contoso.com/signin-oidc.

URI перенаправления в зарегистрированных приложениях можно добавлять и изменять в любое время. На URI перенаправления налагаются следующие ограничения.

  • URL-адрес ответа должен начинаться со схемы https.
  • В URL-адресе ответа учитывается регистр. Его регистр должен соответствовать регистру URL-пути запущенного приложения.

Кэш маркеров для веб-приложения

В примере веб-приложения используется сериализация кэша маркеров в памяти. Эта реализация отлична в примерах. Это также хорошо в рабочих приложениях, если кэш токенов теряется при перезапуске веб-приложения.

Для рабочей среды рекомендуется использовать распределенный кэш памяти. Например, кэш Redis, NCache или кэш SQL Server. Дополнительные сведения о реализации распределенного кэша памяти см. в разделе сериализация кэша маркеров.

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