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

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

Обзор

OpenID Connect (OIDC) представляет собой протокол проверки подлинности, основанный на OAuth 2.0. OIDC можно использовать для безопасного входа пользователей в приложение. В этом примере веб-приложения используется пакет удостоверений Для Python для упрощения добавления проверки подлинности и авторизации в веб-приложения Python.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. Если у вас есть доступ к нескольким клиентам, выберите значок Параметры в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню каталогов и подписок.

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

  4. Щелкните Регистрация приложений и выберите Новая регистрация.

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

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

  7. В поле URI перенаправления выберите Интернет и введите http://localhost:5000/getAToken в поле URL-адреса.

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

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

  10. Выберите Обзор.

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

    Screenshot of the web app Overview page for recording your web app I D.

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

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

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

Шаг 3. Получение примера веб-приложения

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

git clone https://github.com/Azure-Samples/ms-identity-python-webapp.git

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

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

В корневом каталоге проекта сделайте следующее:

  1. .env Создайте файл в корневой папке проекта с помощью .env.sample руководства.

    FLASK_DEBUG=True
    B2C_TENANT_NAME=<tenant name>
    CLIENT_ID=<client id>
    CLIENT_SECRET=<client secret>
    SIGNUPSIGNIN_USER_FLOW=B2C_1_signupsignin1
    EDITPROFILE_USER_FLOW=B2C_1_profile_editing
    RESETPASSWORD_USER_FLOW=B2C_1_reset_password
    
    Ключ Значение
    B2C_TENANT_NAME Первая часть имени клиента Azure AD B2C (например, contoso).
    CLIENT_ID Идентификатор приложения веб-API из шага 2.1.
    CLIENT_SECRET Секрет клиента, созданный в шаге 2.2.
    *_USER_FLOW Потоки пользователей, созданные на шаге 1.

    Переменные среды ссылаются в файле app_config.py и хранятся в отдельном env-файле , чтобы сохранить их вне системы управления версиями. Предоставленный файл gitignore предотвращает проверка в файле ENV.

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

  1. В окне консоли или терминала перейдите к каталогу, где размещен этот пример. Например:

    cd ms-identity-python-webapp
    
  2. Выполните приведенные ниже команды, чтобы установить необходимые пакеты из PyPi и запустить веб-приложение на локальном компьютере.

    python -m pip install -r requirements.txt
    python -m flask run --host localhost --port 5000
    

    В окне консоли отображается номер порта приложения, выполняющегося локально:

     * Debug mode: on
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Running on `http://localhost:5000/` (Press CTRL+C to quit)
    
  3. Чтобы просмотреть веб-приложение, выполняемое на локальном компьютере, перейдите по адресу http://localhost:5000.

  4. Выберите Войти.

    Screenshot showing the sign-in flow.

  5. Завершите процесс регистрации или входа в систему.

  6. После успешной проверки подлинности появится отображаемое имя, как показано ниже.

    Screenshot showing the web app token's display name claim.

Шаг 6. Вызов веб-API

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

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

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

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

Diagram describing a web app with web API, registrations, and tokens.

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

Authorization: Bearer <access token>

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

Шаг 6.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.

Шаг 6.2. Настройка областей

  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. Выберите Добавить область.

Шаг 6.3 Предоставление разрешений веб-приложению

Чтобы предоставить своему приложению (идентификатор приложения: 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.

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

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

Шаг 6.5 Настройка примера приложения для использования веб-API

Откройте файл app_config.py. Он содержит сведения о поставщике удостоверений Azure AD B2C. Обновите следующие свойства параметров приложения:

Ключ Значение
ENDPOINT Универсальный код ресурса (URI) веб-API (например, https://localhost:6000/hello).
SCOPE Созданные веб-API область (например, ["https://contoso.onmicrosoft.com/tasks-api/tasks.read", https://contoso.onmicrosoft.com/tasks-api/tasks.write"]).

Шаг 6.6. Выполнение примера приложения

  1. В окне консоли или терминала перейдите к каталогу, где размещен этот пример.

  2. Если приложение еще не запущено, перезапустите его с помощью команды из шага 5.

  3. Выберите "Вызвать подчиненный API".

    Screenshot showing how to call a web API.

Шаг 7. Развертывание приложения

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

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

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

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