Megosztás a következőn keresztül:


Oktatóanyag: Felhasználók bejelentkezése Python Flask-webalkalmazásba a Microsoft identitásplatform használatával

A következőkre vonatkozik: Zöld kör fehér pipa jellel a munkaerő bérlőkre vonatkozó tartalom jelölésére. A munkaerő bérlők zöld kör fehér pipa jellel a külső bérlőkre vonatkozó tartalom jelölésére. Külső bérlők (további információ)

Ez az oktatóanyag bemutatja a Python Flask-webalkalmazások biztonságossá tételét.

Ebben az oktatóanyagban ön:

  • Python Flask-projekt létrehozása
  • A szükséges függőségek telepítése
  • A Flask-webalkalmazás konfigurálása a Microsoft identitásplatformjának hitelesítéshez való használatára
  • A bejelentkezési és kijelentkezési élmény tesztelése a Flask-webalkalmazásban

Előfeltételek

  • Munkaerőt igénybe vevő. Használhatja az alapértelmezett címtárat, vagy beállíthat egy új bérlőt.
  • Regisztráljon egy új alkalmazást a Microsoft Entra felügyeleti központban, amely csak ebben a szervezeti címtárban lévő fiókokhoz van konfigurálva. További részletekért tekintse meg az alkalmazás regisztrálását . Jegyezze fel a következő értékeket az alkalmazás áttekintési oldaláról későbbi használatra:
    • Alkalmazás (ügyfél) azonosítója
    • Címtár (bérlő) azonosítója
  • Adjon hozzá egy titkos ügyfélkulcsot az alkalmazásregisztrációhoz. Ne használja ügyféltitkokat az éles alkalmazásokban. Használjon inkább tanúsítványokat vagy összevont hitelesítő adatokat. További információ: Hitelesítő adatok hozzáadása az alkalmazáshoz.

Flask-projekt létrehozása

  1. Hozzon létre egy mappát a Flask-alkalmazás üzemeltetéséhez, például Flask-webalkalmazás.

  2. Nyisson meg egy konzolablakot, és a paranccsal váltson a Flask-webalkalmazás mappájára

    cd flask-web-app
    
  3. Virtuális környezet beállítása

    Az operációs rendszertől függően futtassa a következő parancsokat a virtuális környezet beállításához és aktiválásához:

    Windows operációs rendszer esetén:

    py -m venv .venv
    .venv\scripts\activate
    

    MacOS vagy Linux operációs rendszer esetén:

    python3 -m venv .venv
    source .venv/bin/activate
    

Alkalmazásfüggőségek telepítése

Alkalmazásfüggőségek telepítéséhez futtassa a következő parancsokat:

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"

A telepített ms_identity_python kódtár függőségként automatikusan telepíti a Pythonhoz készült Microsoft Authentication Libraryt (MSAL). Az MSAL Python az a kódtár, amely lehetővé teszi a felhasználók hitelesítését és a hozzáférési jogkivonatok kezelését.

A szükséges kódtárak telepítése után frissítse a követelményfájlt az alábbi parancs futtatásával:

pip freeze > requirements.txt

Az alkalmazás konfigurálása hitelesítéshez

A felhasználókat a Microsoft identitásplatform használatával bejelentkező webalkalmazások egy .env nevű konfigurációs fájlon keresztül vannak konfigurálva. A Python Flaskban a következő értékeket kell megadnia:

Környezet változó Description
AUTHORITY Annak a felhőpéldánynak az URL-címe, amelyben az alkalmazás regisztrálva van. Formátum: https://{Instance}/{TenantId}. Használja a következő példányértékek egyikét:
- https://login.microsoftonline.com/ (Nyilvános Azure-felhő)
- https://login.microsoftonline.us/ (Azure US Government)
- https://login.microsoftonline.de/ (Microsoft Entra Germany)
- https://login.partner.microsoftonline.cn/ (Microsoft Entra China, üzemeltető: 21Vianet)
TENANT_ID Annak a bérlőnek az azonosítója, amelyben az alkalmazás regisztrálva van. Válassza ki a bérlőazonosítót az alkalmazásregisztrációból, vagy használja a következő egyiket:
- organizations: jelentkezzen be felhasználókat bármely munkahelyi vagy iskolai fiókba
- common: jelentkezzenek be felhasználók munkahelyi vagy iskolai fiókkal, illetve Microsoft személyes fiókkal
- consumers: csak Microsoft személyes fiókkal jelentkezzenek be a felhasználók
CLIENT_ID Az alkalmazás (ügyfél) azonosítója az alkalmazásregisztrációból beszerzett módon.
CLIENT_SECRET A Microsoft Entra felügyeleti központban a hitelesítő adatok hozzáadásából nyert titkos érték.
REDIRECT_URI Az URI, ahová a Microsoft identitásplatform küldi a biztonsági tokeneket a hitelesítés után.

A konfigurációs fájl frissítése

  1. Hozzon létre egy .env fájlt a gyökérmappában az alkalmazás konfigurációjának biztonságos tárolásához. A .env fájlnak a következő környezeti változókat kell tartalmaznia:

    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>"
    

    Helyettesítse a helyőrzőket a következő értékekkel:

    • Cserélje le a <Enter_your_client_id>-t a alkalmazás (ügyfél) azonosítójára, amely az Ön által regisztrált ügyfél-webalkalmazás.
    • Cserélje ki a <Enter_tenant_id> helyére a webalkalmazás regisztrációjánál szereplő címtár (bérlő) azonosítót.
    • Cserélje le a <Enter_your_client_secret>-t a létrehozott webalkalmazás ügyfél titkos értékére. Ebben az oktatóanyagban a titkos kódokat bemutató célokra használjuk. Éles környezetben használjon biztonságosabb módszereket, például tanúsítványokat vagy federált identitás hitelesítő adatokat.
    • Cserélje le <Enter_redirect_uri> a korábban regisztrált átirányítási URI-ra. Az oktatóanyag az átirányítási URI elérési útját http://localhost:3000/getAToken-ra állítja be.
  2. Hozzon létre egy app_config.py fájlt a környezeti változók olvasásához és a szükséges konfigurációk hozzáadásához.

    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.
    

Alkalmazásvégpontok konfigurálása

Ebben a szakaszban létrehozza a webalkalmazás végpontjait, és hozzáadja az üzleti logikát az alkalmazáshoz.

  1. Hozzon létre egy app.py nevű fájlt a gyökérmappában.

  2. Importálja a szükséges függőségeket a app.py fájl tetején.

    import os
    import requests
    from flask import Flask, render_template
    from identity.flask import Auth
    import app_config
    
  3. Inicializálja a Flask-alkalmazást, és konfigurálja a app_config.py fájlban megadott munkamenet-tárolási típus használatára.

    app = Flask(__name__)
    app.config.from_object(app_config)
    
  4. Inicializálja az ügyfélalkalmazást. A Flask-webalkalmazások bizalmas ügyfélnek számítnak. Azért adjuk át az ügyfél titkos kulcsát, mert a bizalmas ügyfelek biztonságosan tárolhatják azt. A háttérben az identitáskönyvtár meghívja az MSAL könyvtár ConfidentialClientApplication osztályát.

    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"]
    )
    
  5. Adja hozzá a szükséges végpontokat a Flask-alkalmazáshoz. A webalkalmazás a felhasználó bejelentkezéséhez az engedélyezési kód folyamata használja. Az ms_identity_python MSAL burkolótár segít az MSAL-kódtárzal való interakcióban, így egyszerűbbé válik a bejelentkezés és a kijelentkezés az alkalmazásba. Hozzáadunk egy indexlapot, és a login_required könyvtár által biztosított dekoratőrrel védjük. A login_required dekoratőr biztosítja, hogy csak hitelesített felhasználók férhessenek hozzá az indexlaphoz.

    @app.route("/")
    @auth.login_required
    def index(*, context):
        return render_template(
            'index.html',
            user=context['user'],
            title="Flask Web App Sample",
        )
    

    A felhasználó garantáltan jelen van, mert ezt a nézetet @login_required-val láttuk el.

Az alkalmazássablonok létrehozása

Hozzon létre egy -sablonok nevű mappát, a gyökérmappában. A sablonok mappában hozzon létre egy index.htmlnevű fájlt. Ez az alkalmazás kezdőlapja. Adja hozzá a következő kódot a index.html fájlhoz:

<!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>

A minta webalkalmazás futtatása és tesztelése

  1. A terminálban futtassa a következő parancsot:

    python3 -m flask run --debug --host=localhost --port=3000
    

    Használhatja a választott portot. Ennek a portnak hasonlónak kell lennie a korábban regisztrált átirányítási URI portjához.

  2. Nyissa meg a böngészőt, majd lépjen a http://localhost:3000pontra. Megjelenik egy bejelentkezési oldal.

  3. Jelentkezzen be Microsoft-fiókjával a lépések végrehajtásával. A rendszer kéri, hogy adjon meg egy e-mail-címet és jelszót a bejelentkezéshez.

  4. Ha az alkalmazásnak bármilyen hatókörre van szüksége, megjelenik egy hozzájárulási képernyő. Az alkalmazás engedélyt kér ahhoz, hogy fenntartsa a hozzáférést azokhoz az adatokhoz, amelyekhez hozzáférést engedélyez, és be kell jelentkeznie. Válassza Elfogadáslehetőséget. Ez a képernyő nem jelenik meg, ha nincs definiálva hatókör.

A bejelentkezés vagy a regisztráció után a rendszer visszairányítja a webalkalmazásba. A következő képernyőképhez hasonló lap jelenik meg:

A Flask-webalkalmazás-minta képernyőképe a sikeres hitelesítés után.

Válassza Kijelentkezés lehetőséget az alkalmazásból való kijelentkezéshez. A rendszer kéri, hogy válasszon ki egy fiókot, amelyből ki szeretne jelentkezni. Válassza ki a bejelentkezéshez használt fiókot.

Egyéni URL-tartomány használata (nem kötelező)

A munkaerő-bérlők nem támogatják az egyéni URL-tartományokat.