Настройка проверки подлинности в примере веб-приложения, которое вызывает веб-API при помощи 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. Microsoft Identity Web — это набор библиотек ASP.NET Core, которые упрощают процесс добавления проверки подлинности и авторизации в веб-приложения, которые могут вызывать безопасный веб-API.

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

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

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

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

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

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

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

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

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

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

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

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

Diagram of a web app with web API call registrations and tokens.

Вызов веб-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. Запишите значение идентификатора приложения (клиента) для дальнейшего использования при настройке веб-приложения.

    Screenshot that demonstrates how to get a web A P I application I D.

Шаг 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. Запишите значение параметра Идентификатор приложения (клиента) для использования на более позднем этапе при настройке веб-приложения.

    Screenshot of the web app Overview page for recording your web application ID.

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

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

  1. В разделе Управление выберите Сертификаты и секреты.
  2. Щелкните Создать секрет клиента.
  3. В поле Описание введите описание секрета клиента (например, clientsecret1).
  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. В списке настроенных разрешений выберите свою область, а затем скопируйте полное имя области.

    Screenshot of the configured permissions pane, showing that read access permissions are granted.

Шаг 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 SignUpSignInPolicyId Потоки пользователей или настраиваемая политика из шага 1.

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

{
  "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 (например, https://contoso.b2clogin.com).
AzureAdB2C Домен Полное имя клиента Azure AD B2C (например, contoso.onmicrosoft.com).
AzureAdB2C ClientId Идентификатор веб-приложения из шага 2.3.
AzureAdB2C ClientSecret Секрет веб-приложения из шага 2.4.
AzureAdB2C SignUpSignInPolicyId Потоки пользователей или настраиваемая политика из шага 1.
TodoList TodoListScope Области веб-API, созданные на шаге 2.5.
TodoList 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.

Screenshot of the web app token claims.

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

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

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

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

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

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

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

Следующие шаги