Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применяется к:
Клиенты рабочей силы
Внешние клиенты (дополнительные сведения)
В этом руководстве описано, как защитить веб-приложение Python Flask.
Изучив это руководство, вы:
- Создание проекта Python Flask
- Установка необходимых зависимостей
- Настройка веб-приложения Flask для использования платформы удостоверений Майкрософт для проверки подлинности
- Тестирование интерфейса входа и выхода в веб-приложении Flask
Необходимые условия
- Арендатор рабочей силы. Вы можете использовать каталог по умолчанию или настроить нового арендатора.
- Зарегистрируйте новое приложение в Центре администрирования Microsoft Entra, настроенное только для учетных записей в этом каталоге организации. Дополнительные сведения см. в статье "Регистрация приложения ". Запишите следующие значения на странице обзора приложения для последующего использования:
- Идентификатор приложения (клиента)
- Идентификатор каталога (арендатора)
- Добавьте секрет клиента в регистрацию приложения. Не используйте секреты клиента в рабочих приложениях. Вместо этого используйте сертификаты или федеративные учетные данные. Дополнительные сведения см. в статье о добавлении учетных данных в приложение.
- Питон 3+.
- Visual Studio Code или другой редактор кода.
Создание проекта Flask
Создайте папку для размещения приложения Flask, например flask-web-app.
Откройте окно консоли и перейдите в папку вашего веб-приложения Flask с помощью команды
cd flask-web-appНастройка виртуальной среды
В зависимости от операционной системы выполните следующие команды, чтобы настроить виртуальную среду и активировать ее:
Для операционной системы Windows:
py -m venv .venv .venv\scripts\activateДля операционной системы macOS или Linux:
python3 -m venv .venv source .venv/bin/activate
Установка зависимостей приложений
Чтобы установить зависимости приложений, выполните следующие команды:
pip install flask
pip install python-dotenv
pip install requests
pip install "ms_identity_python[flask] @ git+https://github.com/azure-samples/ms-identity-python@0.9"
Библиотека ms_identity_python , устанавливаемая автоматически, устанавливает библиотеку проверки подлинности Майкрософт (MSAL) для Python в качестве его зависимостей. MSAL Python — это библиотека, которая позволяет выполнять проверку подлинности пользователей и управлять маркерами доступа.
После установки необходимых библиотек обновите файл требований, выполнив следующую команду:
pip freeze > requirements.txt
Настройка приложения для проверки подлинности
Веб-приложения, которые выполняют вход пользователей с помощью платформы удостоверений Майкрософт, настраиваются с помощью файла конфигурации env. В Python Flask необходимо указать следующие значения:
| Переменная среды | Description |
|---|---|
AUTHORITY |
URL-адрес облачного экземпляра, в котором зарегистрировано приложение. Формат: https://{Instance}/{TenantId}. Используйте одно из следующих значений инстанции:- https://login.microsoftonline.com/ (общедоступное облако Azure)- https://login.microsoftonline.us/ (Azure для государственных организаций США)- https://login.microsoftonline.de/ (Microsoft Entra Germany)- https://login.partner.microsoftonline.cn/ (Microsoft Entra China, под управлением 21Vianet) |
TENANT_ID |
Идентификатор клиента, в котором зарегистрировано приложение. Предпочитайте идентификатор клиента из регистрации приложения или используйте один из следующих вариантов: - organizations: вход пользователей в любой рабочей или учебной учетной записи- common: вход пользователей с помощью рабочей или учебной учетной записи или личной учетной записи Майкрософт- consumers: вход пользователей только с помощью личной учетной записи Майкрософт |
CLIENT_ID |
Идентификатор приложения (клиента), полученного из регистрации приложения. |
CLIENT_SECRET |
Значение секрета, полученное из добавления учетных данных в Центре администрирования Microsoft Entra. |
REDIRECT_URI |
URI, в который платформа идентификации Microsoft отправляет токены безопасности после аутентификации. |
Обновление файла конфигурации
Создайте env-файл в корневой папке для безопасного хранения конфигурации приложения. Файл .env должен содержать следующие переменные среды:
CLIENT_ID="<Enter_your_client_id>" CLIENT_SECRET="<Enter_your_client_secret>" AUTHORITY="https://login.microsoftonline.com/<Enter_tenant_id>" REDIRECT_URI="<Enter_redirect_uri>"Замените заполнители следующими значениями:
- Замените
<Enter_your_client_id>идентификатором приложения (клиента) зарегистрированного клиентского веб-приложения. - Замените
<Enter_tenant_id>на идентификатор Каталога (Арендатора), где вы зарегистрировали веб-приложение. - Замените
<Enter_your_client_secret>значение секрета клиента для созданного веб-приложения. В этом руководстве мы используем секреты для демонстрационных целей. В рабочей среде используйте более безопасные подходы, такие как сертификаты или полномочия федеративной идентификации. - Замените
<Enter_redirect_uri>на URI перенаправления, который вы зарегистрировали ранее. В этом руководстве путь URI перенаправления устанавливается наhttp://localhost:3000/getAToken.
- Замените
Создайте файл app_config.py для чтения переменных среды и добавления других необходимых конфигураций.
import os AUTHORITY = os.getenv("AUTHORITY") CLIENT_ID = os.getenv("CLIENT_ID") CLIENT_SECRET = os.getenv("CLIENT_SECRET") REDIRECT_URI = os.getenv("REDIRECT_URI") SESSION_TYPE = "filesystem" # Tells the Flask-session extension to store sessions in the filesystem. Don't use in production apps.
Настройка конечных точек приложения
На этом этапе вы создадите конечные точки веб-приложения и добавьте бизнес-логику в приложение.
Создайте файл с именем app.py в корневой папке.
Импорт необходимых зависимостей в верхней части файла app.py .
import os import requests from flask import Flask, render_template from identity.flask import Auth import app_configИнициализировать приложение Flask и настроить его для использования типа хранилища сеансов, указанного в файле app_config.py .
app = Flask(__name__) app.config.from_object(app_config)Инициализация клиента приложения. Веб-приложение Flask является конфиденциальным клиентом. Мы передаваем секрет клиента, так как конфиденциальные клиенты могут безопасно хранить его. Внутренне библиотека идентификации вызывает класс
ConfidentialClientApplicationбиблиотеки MSAL.auth = Auth( app, authority=app.config["AUTHORITY"], client_id=app.config["CLIENT_ID"], client_credential=app.config["CLIENT_SECRET"], redirect_uri=app.config["REDIRECT_URI"] )Добавьте необходимые конечные точки в приложение Flask. Веб-приложение использует поток кода авторизации для входа пользователя. Библиотека оболочки MSAL ms_identity_python помогает взаимодействовать с библиотекой MSAL, что упрощает добавление входа и выход в приложение. Мы добавим страницу индекса и защищаем ее с помощью
login_requiredдекоратора, предоставленного библиотекой ms_identity_python . Декораторlogin_requiredгарантирует, что только прошедшие проверку подлинности пользователи могут получить доступ к странице индекса.@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", )Пользователь гарантированно присутствует, так как мы аннотировали это представление с помощью
@login_required.
Создание шаблонов приложений
Создайте папку с именем шаблонов в корневой папке. В папке шаблонов создайте файл с именемindex.html. Это домашняя страница приложения. Добавьте следующий код в файл index.html :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<h2>Welcome {{ user.get("name") }}!</h2>
<img src="https://github.com/Azure-Samples/ms-identity-python-webapp-django/raw/main/static/topology.png" alt="Topology">
<ul>
{% if api_endpoint %}
<!-- If an API endpoint is declared and scopes defined, this link will show. We set this in the call an API tutorial. For this tutorial, we do not define this endpoint. -->
<li><a href='/call_api'>Call an API</a></li>
{% endif %}
<li><a href="{{ url_for('identity.logout') }}">Logout</a></li>
</ul>
<hr>
<footer style="text-align: right">{{ title }}</footer>
</body>
</html>
Запуск и проверка примера веб-приложения
В терминале выполните следующую команду:
python3 -m flask run --debug --host=localhost --port=3000Вы можете использовать нужный порт. Этот порт должен быть похож на порт URI перенаправления, зарегистрированного ранее.
Откройте браузер, а затем перейдите к
http://localhost:3000. Вы увидите страницу входа.Войдите с помощью учетной записи Майкрософт, выполнив действия. Вам предлагается указать адрес электронной почты и пароль для входа.
Если приложению нужны какие-либо разрешения, отобразится экран согласия. Приложение запрашивает разрешение на сохранение доступа к данным, к которым вы предоставили доступ, и на вход в систему. Выберите Принять. Этот экран не отображается, если области не определены.
После входа или регистрации вы перенаправляетесь обратно в веб-приложение. Вы увидите страницу, похожую на следующий снимок экрана:
Выберите выход, чтобы выйти из приложения. Вам будет предложено выбрать учетную запись для выхода. Выберите учетную запись, используемую для входа.
Использование личного домена URL-адреса (необязательно)
Арендаторы для сотрудников не поддерживают пользовательские домены URL.