Настройка проверки подлинности в примере веб-приложения Python с помощью Azure AD B2C
В этой статье используется пример веб-приложения Python, который демонстрирует, как добавить проверку подлинности Azure Active Directory B2C (Azure AD B2C) в веб-приложения.
Обзор
OpenID Connect (OIDC) представляет собой протокол проверки подлинности, основанный на OAuth 2.0. OIDC можно использовать для безопасного входа пользователей в приложение. В этом примере веб-приложения используется пакет удостоверений Для Python для упрощения добавления проверки подлинности и авторизации в веб-приложения Python.
Процесс входа включает следующие шаги:
- Пользователи переходят к веб-приложению и выбирают Вход.
- Приложение инициирует запрос на проверку подлинности и перенаправляет пользователей в Azure AD B2C.
- Пользователи выполняют вход или регистрацию, сброс пароля или вход с помощью учетной записи социальной сети.
- После успешного входа Azure AD B2C возвращает в приложение маркер идентификатора.
- Приложение обменивается кодом авторизации с маркером идентификации, проверяет маркер идентификации, считывает утверждения, а затем возвращает защищенную страницу пользователям.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Если у вас еще нет клиента Azure AD B2C, создайте его. Он должен быть связан с вашей подпиской Azure.
- Python 3.8+
Шаг 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. Регистрация приложения
Чтобы создать регистрацию веб-приложения, сделайте следующее:
Войдите на портал Azure.
Если у вас есть доступ к нескольким клиентам, щелкните значок "Параметры " в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню каталогов и подписок .
В портале Azure найдите и выберите Azure AD B2C.
Щелкните Регистрация приложений и выберите Новая регистрация.
В поле Имя введите имя приложения (например, webapp1).
В области Поддерживаемые типы учетных записей выберите Учетные записи в любом поставщике удостоверений или в организационном каталоге (для аутентификации пользователей с помощью потока пользователей).
В поле URI перенаправления выберите Интернет и введите
http://localhost:5000/getAToken
в поле URL-адреса.В разделе Разрешения установите флажок Предоставьте согласие администратора для разрешений openid и offline_access.
Выберите Зарегистрировать.
Выберите Обзор.
Запишите значение параметра Идентификатор приложения (клиента) для использования на более позднем этапе при настройке веб-приложения.
Шаг 2.2. Создание секрета клиента веб-приложения
Создайте секрет клиента для зарегистрированного веб-приложения. Веб-приложение использует секрет клиента для подтверждения подлинности при запросе токенов.
- В разделе Управление выберите Сертификаты и секреты.
- Щелкните Создать секрет клиента.
- В поле Описание введите описание секрета клиента (например, clientsecret1).
- В разделе Истекает выберите срок действия секрета, а затем выберите Добавить.
- Запишите значение секрета в поле Значение. Это значение будет использовано позже для конфигурации.
Шаг 3. Получение примера веб-приложения
Скачайте ZIP-файл или клонируйте пример веб-приложения с GitHub.
git clone https://github.com/Azure-Samples/ms-identity-python-webapp.git
Извлеките предоставленный для примера файл в папку, где общая длина пути не превышает 260 символов.
Шаг 4. Настройка примера веб-приложения
В корневом каталоге проекта сделайте следующее:
.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. Запуск примера веб-приложения
В окне консоли или терминала перейдите к каталогу, где размещен этот пример. Например:
cd ms-identity-python-webapp
Выполните приведенные ниже команды, чтобы установить необходимые пакеты из 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)
Чтобы просмотреть веб-приложение, выполняемое на локальном компьютере, перейдите по адресу
http://localhost:5000
.Выберите Войти.
Завершите процесс регистрации или входа в систему.
После успешной проверки подлинности появится отображаемое имя, как показано ниже.
Шаг 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).
Регистрации приложений и архитектура приложений описаны на следующей схеме:
После завершения проверки подлинности пользователи взаимодействуют с приложением, которое вызывает защищенный веб-API. Этот веб-API использует проверку подлинности посредством маркера носителя. Маркер носителя — это маркер доступа, полученный приложением от Azure AD B2C. Приложение передает маркер в заголовке авторизации HTTPS-запроса.
Authorization: Bearer <access token>
Если область действия токена доступа не соответствует областям веб-API, библиотека аутентификации получает новый токен доступа с правильными областями.
Шаг 6.1. Регистрация приложения веб-API
Чтобы создать регистрацию приложения веб-API (идентификатор приложения: 2), выполните следующие действия.
Войдите на портал Azure.
Убедитесь, что вы используете каталог, содержащий клиент Azure AD B2C. На панели инструментов портала выберите значок Каталоги и подписки.
В настройках портала на странице Каталоги и подписки найдите свой каталог Azure AD B2C в списке Имя каталога и выберите Переключить.
В портале Azure найдите и выберите Azure AD B2C.
Щелкните Регистрация приложений и выберите Новая регистрация.
В поле Имя введите имя приложения (например, my-api1). Оставьте значения по умолчанию для URI перенаправления и поддерживаемых типов учетных записей.
Выберите Зарегистрировать.
Когда регистрация приложения завершится, выберите Обзор.
Запишите значение идентификатора приложения (клиента) для дальнейшего использования при настройке веб-приложения.
Шаг 6.2. Настройка областей
Выберите созданное приложение my-api1 (идентификатор приложения: 2), чтобы открыть страницу Обзор.
В разделе Управление выберите Предоставление API.
Рядом с полем URI идентификатора приложения щелкните ссылку Задать. Замените значение по умолчанию (уникальный идентификатор) уникальным именем (например, tasks-api), а затем нажмите Сохранить.
Когда веб-приложение запрашивает маркер доступа для веб-API, оно должно добавить этот URI в качестве префикса для каждой области, определяемой для API.
В разделе Области, определенные этим API выберите Добавление области.
Чтобы создать область, определяющую доступ для чтения к API, сделайте следующее.
- В поле Имя области введите tasks.read.
- В качестве отображаемого имени согласия администратора укажите Доступ на чтение к API задач.
- В качестве описания согласия администратора введите Предоставляет доступ на чтение к API задач.
Выберите Добавить область.
Выберите Добавить область и добавьте область, определяющую доступ для записи к API:
- В поле Имя области введите tasks.write.
- В качестве отображаемого имени согласия администратора укажите Доступ на запись к API задач.
- В качестве описания согласия администратора введите Предоставляет доступ на запись к API задач.
Выберите Добавить область.
Шаг 6.3 Предоставление разрешений веб-приложению
Чтобы предоставить своему приложению (идентификатор приложения: 1) разрешения, выполните следующие действия.
Выберите Регистрация приложений, а затем выберите созданное вами приложение (идентификатор приложения: 1).
В разделе Управление выберите Разрешения API.
В разделе Настроенные разрешения выберите Добавить разрешение.
Выберите вкладку Мои API.
Выберите API (идентификатор приложения: 2), к которому веб-приложению должен быть предоставлен доступ. Например, введите my-api1.
В разделе Разрешение разверните узел tasks, а затем выберите определенные ранее области (например, tasks.read и tasks.write).
Выберите Добавить разрешения.
Выберите Предоставить согласие администратора для <имя арендатора>.
Выберите Да.
Выберите Обновить, а затем убедитесь, что Разрешено для... отображается в разделе Состояние для обеих областей.
В списке настроенных разрешений выберите свою область, а затем скопируйте полное имя области.
Шаг 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. Выполнение примера приложения
В окне консоли или терминала перейдите к каталогу, где размещен этот пример.
Если приложение еще не запущено, перезапустите его с помощью команды из шага 5.
Выберите "Вызвать подчиненный API".
Шаг 7. Развертывание приложения
В рабочем приложении URI перенаправления регистрации приложения — это обычно общедоступная конечная точка, где выполняется приложение, например https://contoso.com/getAToken
.
URI перенаправления в зарегистрированных приложениях можно добавлять и изменять в любое время. На URI перенаправления налагаются следующие ограничения.
- URL-адрес перенаправления должен начинаться со схемы
https
. - URL-адрес перенаправления учитывает регистр. Его регистр должен соответствовать регистру URL-пути выполняющегося приложения.