Python Flask-webalkalmazás előkészítése hitelesítéshez
Ez az oktatóanyag egy olyan sorozat 2. része, amely bemutatja a Python Flask-webalkalmazások készítését és a bejelentkezési támogatás hozzáadását a Microsoft Identitásplatform használatával. A sorozat 1. részében regisztrálta és konfigurálta az alkalmazást a Microsoft Entra ID-bérlőben.
Az oktatóanyag során az alábbi lépéseket fogja végrehajtani:
- Új Python Flask-webalkalmazás-projekt létrehozása
- Alkalmazásfüggőségek telepítése
- Az alkalmazás felhasználói felületi összetevőinek hozzáadása
- A Flask-webalkalmazás konfigurálása a Microsoft Entra-azonosító hitelesítéshez való használatára
Előfeltételek
- Végezze el az oktatóanyag lépéseit: Python-webalkalmazás regisztrálása a Microsoft Identitásplatform.
- Visual Studio Code vagy bármely más IDE.
- Helyileg telepített Python 3.9 vagy újabb .
Új Python-webalkalmazás-projekt létrehozása
Az oktatóanyag többi részének elvégzéséhez létre kell hoznia egy Python Flask-webalkalmazás-projektet. Ha inkább befejezett kódmintát szeretne használni a tanuláshoz, töltse le a Python Flask webalkalmazás-mintát a GitHubról.
A Python Flask-webalkalmazás alapoktól való létrehozásához kövesse az alábbi lépéseket:
- Hozzon létre egy mappát az alkalmazás üzemeltetéséhez, és nevezze el flask-web-appnak.
- Lépjen a projektkönyvtárba, és hozzon létre három app.py, app.config.py és requirements.txt nevű fájlt.
- Hozzon létre egy .env fájlt a projekt gyökérmappájában.
- Hozzon létre egy mappa nevű sablont a projekt gyökérkönyvtárában. A Flask renderelési sablonokat keres ebben az alkönyvtárban.
A fájlok létrehozása után a projekt fájljának és könyvtárának az alábbi struktúrához kell hasonlítania:
python-webapp/
├── templates/
│ ├── display.html
│ ├── index.html
│ ├── login.html
├── .env.sample
├── app.py
├── app.config.py
│── requirements.txt
Alkalmazásfüggőségek telepítése
A buildelt alkalmazás a identity
PythonHoz készült Microsoft Authentication Library (MSAL) burkolóját használja. Emellett telepíti a Flaskot, a Flask-munkamenetet, a kéréseket és az alkalmazás által igényelt összes egyéb függőséget. Frissítse a requirements.txt ezekkel a függőségekkel.
Flask>=2.2
Flask-Session>=0.3.2,<0.6
werkzeug>=2
requests>=2,<3
identity>=0.5.1,<0.6
python-dotenv<0.22
Alkalmazás felhasználói felületének összetevőinek hozzáadása
Ebben a szakaszban HTML-sablonokat hoz létre az alkalmazásban definiált útvonalakhoz, beleértve a bejelentkezést, a kijelentkezéseket, az API-hívásokat és a hibasablonokat. Az alábbi lépéseket követve hozhat létre sablonokat az egyes lapokhoz:
Bejelentkezési sablonok
A sablonok mappájában hozzon létre egy login.html nevű HTML-fájlt, és adja hozzá a következő tartalmat:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: Login</title>
</head>
<body>
<h1>Microsoft Identity Python Web App</h1>
{% if user_code %}
<ol>
<li>To sign in, type <b>{{ user_code }}</b> into
<a href='{{ auth_uri }}' target=_blank>{{ auth_uri }}</a>
to authenticate.
</li>
<li>And then <a href="{{ url_for('auth_response') }}">proceed</a>.</li>
</ol>
{% else %}
<ul><li><a href='{{ auth_uri }}'>Sign In</a></li></ul>
{% endif %}
<hr>
<footer style="text-align: right">Microsoft identity platform Web App Sample {{ version }}</footer>
</body>
</html>
Ez a sablon azt a bejelentkezési lapot jelöli, ahol a felhasználók bejelentkezhetnek az alkalmazásba.
Indexsablon
A sablonok mappában hozzon létre egy index.html nevű HTML-fájlt, és adja hozzá a következő tartalmat:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: Index</title>
</head>
<body>
<h1>Microsoft Identity Python Web App</h1>
<h2>Welcome {{ user.get("name") }}!</h2>
<ul>
{% if config.get("ENDPOINT") %}
<li><a href='/call_downstream_api'>Call a downstream API</a></li>
{% endif %}
<li><a href="/logout">Logout</a></li>
</ul>
<hr>
<footer style="text-align: right">Microsoft identity platform Web App Sample {{ version }}</footer>
</body>
</html>
Az indexsablon a webalkalmazás kezdőlapjaként szolgál, amely akkor jelenik meg, amikor a felhasználók megtekintik az alkalmazás gyökér URL-címét.
Lap megjelenítése
Ez a sablon egy alsóbb rétegbeli API-hívás eredményét jeleníti meg. Adja hozzá a következő kódrészletet a display.html.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: API</title>
</head>
<body>
<a href="javascript:window.history.go(-1)">Back</a> <!-- Displayed on top of a potentially large JSON response, so it will remain visible -->
<h1>Result of the downstream API Call</h1>
<pre>{{ result |tojson(indent=4) }}</pre> <!-- Just a generic json viewer -->
</body>
</html>
Hibasablonok
Hitelesítési hibasablon
A sablonok mappájában hozzon létre egy auth_error.html nevű HTML-fájlt, amely megjeleníti az esetlegesen megjelenő hibaüzeneteket. Adja hozzá a következő kódot a auth_error.html.
<!DOCTYPE html>*
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: Error</title>
</head>
<body>
<h2>Login Failure</h2>
<dl>
{#
Flask automatically escapes these unsafe input, so we do not have to.
See also https://flask.palletsprojects.com/en/2.0.x/templating/#jinja-setup
#}
<dt>{{ result.get("error") }}</dt>
<dd>{{ result.get("error_description") }}</dd>
</dl>
<hr>
<a href="{{ url_for('index') }}">Homepage</a>
</body>
</html>
Konfigurációs hibasablon
A sablonok mappájában hozzon létre egy config_error.html nevű HTML-fájlt, amely üzenetet jelenít meg, ha hiányzik egy szükséges konfiguráció. Adja hozzá a következő kódot a config_error.html.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: Error</title>
</head>
<body>
<h2>Config Missing</h2>
<p>
Almost there. Did you forget to set up
<a target=_blank
href="https://learn.microsoft.com/azure/active-directory/develop/web-app-quickstart?pivots=devlang-python#step-5-configure-the-sample-app">
necessary environment variables</a> for your deployment?
</p>
<hr>
<a href="{{ url_for('index') }}">Homepage</a>
</body>
</html>
A konfigurációs fájl létrehozása
A kódszerkesztőben nyissa meg a konfigurációs paramétereket tartalmazó app_config.py, és adja hozzá a következő kódot:
import os
AUTHORITY= os.getenv("AUTHORITY")
# Application (client) ID of app registration
CLIENT_ID = os.getenv("CLIENT_ID")
# Application's generated client secret: never check this into source control!
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
REDIRECT_PATH = "/getAToken" # Used for forming an absolute URL to your redirect URI.
ENDPOINT = 'https://graph.microsoft.com/v1.0/me'
SCOPE = ["User.Read"]
# Tells the Flask-session extension to store sessions in the filesystem
SESSION_TYPE = "filesystem"
Hozzon létre egy .env fájlt a konfigurációs beállítások tárolásához.
Ebben a példában egy .env fájl használatával tárolja és kezeli az alkalmazás konfigurációs beállításait, környezeti változóit és hitelesítő adatait, amelyeket nem szabad beágyazni a kódba. Nyissa meg a projektkönyvtár gyökerében létrehozott .env fájlt, és adja hozzá a következő értékeket.
# The following variables are required for the app to run.
CLIENT_ID=<client id>
CLIENT_SECRET=<client secret>
AUTHORITY=<Enter_your_authority_url>
Az .env.sample fájlban cserélje le a következő helyőrzőket:
-
CLIENT_ID
az alkalmazásregisztráció áttekintési oldalán elérhető alkalmazás-(ügyfél-) azonosítóval .CLIENT_SECRET
a Tanúsítványok > Titkos kódokban létrehozott ügyféltitkokkalAUTHORITY
helyetthttps://login.microsoftonline.com/<TENANT_GUID>
. A címtár (bérlő) azonosítója az alkalmazásregisztráció áttekintési oldalán érhető el.
Következő lépés
Az oktatóanyag-sorozat következő részében megtudhatja, hogyan adhat hozzá bejelentkezési támogatást egy Python Flask-webalkalmazáshoz: