Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяется: Арендаторы рабочего пространства
Внешние арендаторы (дополнительные сведения)
В этом руководстве описано, как защитить веб-приложение 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*-файл в корневой папке для безопасного хранения конфигурации приложения. Файл .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.