Freigeben über


Tutorial: Anmelden von Benutzern bei einer Python Flask-Web-App mithilfe von Microsoft Identity Platform

Gilt für: Grüner Kreis mit einem weißen Häkchensymbol. Arbeitsgruppenmandanten Grüner Kreis mit einem weißen Häkchensymbol. Externe Mandanten (weitere Informationen)

In diesem Tutorial erfahren Sie, wie Sie eine Python-Flask-Web-App sichern.

In diesem Tutorial erfahren Sie:

  • Erstellen eines Python-Flask-Projekts
  • Installieren der erforderlichen Abhängigkeiten
  • Konfigurieren Sie Ihre Flask-Web-App für die Verwendung von Microsoft Identity Platform für die Authentifizierung
  • Testen Sie die An- und Abmeldung in Ihrer Flask-Web-App

Voraussetzungen

  • Ein Mandant für Mitarbeitende. Sie können Ihr Standardverzeichnis verwenden oder einen neuen Mandanten einrichten.
  • Registrieren Sie eine neue App im Microsoft Entra Admin Center, die nur für Konten in diesem Organisationsverzeichnis konfiguriert ist. Weitere Informationen finden Sie unter Registrieren einer Anwendung . Notieren Sie die folgenden Werte auf der Anwendungsübersichtsseite für die spätere Verwendung:
    • Anwendungs-ID (Client)
    • Verzeichnis-ID (Mandant)
  • Fügen Sie Ihrer App-Registrierung einen geheimen Clientschlüssel hinzu. Verwenden Sie keine Client-Geheimnisse in Produktionsanwendungen. Verwenden Sie stattdessen Zertifikate oder Verbundanmeldeinformationen. Weitere Informationen finden Sie unter Hinzufügen von Anmeldeinformationen zu Ihrer Anwendung.

Erstellen eines Flask-Projekts

  1. Erstellen Sie einen Ordner zum Hosten Ihrer Flask-Anwendung, z. B. flask-web-app.

  2. Öffnen Sie ein Konsolenfenster und wechseln Sie mit dem Befehl

    cd flask-web-app
    
  3. Einrichten einer virtuellen Umgebung

    Führen Sie je nach Betriebssystem die folgenden Befehle aus, um Ihre virtuelle Umgebung einzurichten und zu aktivieren:

    Für Windows-Betriebssysteme:

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

    Für macOS- oder Linux-Betriebssysteme:

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

Installieren von App-Abhängigkeiten

Führen Sie die folgenden Befehle aus, um App-Abhängigkeiten zu installieren:

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"

Die ms_identity_python Bibliothek, die Sie installieren, installiert automatisch die Microsoft Authentication Library (MSAL) für Python als Abhängigkeit. MSAL Python ist die Bibliothek, mit der Sie Benutzer authentifizieren und ihre Zugriffstoken verwalten können.

Aktualisieren Sie nach der Installation der erforderlichen Bibliotheken Ihre Anforderungsdatei, indem Sie den folgenden Befehl ausführen:

pip freeze > requirements.txt

Fügen Sie Ihre Konfigurationen hinzu

  1. Erstellen Sie eine .env*-Datei in Ihrem Stammordner, um die Konfiguration Ihrer App sicher zu speichern. Ihre .env-Datei sollte die folgenden Umgebungsvariablen enthalten:

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

    Ersetzen Sie die Platzhalter durch die folgenden Werte:

    • Ersetzen Sie <Enter_your_client_id> sie durch die Anwendungs-ID (Client-ID) der Client-Web-App, die Sie registriert haben.
    • Ersetzen Sie <Enter_tenant_id> sie durch die Verzeichnis-ID (Mandanten), in der Sie Ihre Web-App registriert haben.
    • Ersetzen Sie <Enter_your_client_secret> ihn durch den Wert des geheimen Clientschlüssels für die Web-App, die Sie erstellt haben. In diesem Tutorial verwenden wir Geheimnisse zu Demonstrationszwecken. Verwenden Sie in der Produktion sicherere Ansätze wie Zertifikate oder Anmeldeinformationen für Verbundidentitäten.
    • Ersetzen Sie ihn durch den Umleitungs-URI <Enter_redirect_uri> , den Sie zuvor registriert haben. In diesem Tutorial wird der Umleitungs-URI-Pfad auf http://localhost:3000/getATokenfestgelegt.
  2. Erstellen Sie eine app_config.py Datei, um die Umgebungsvariablen zu lesen und weitere Konfigurationen hinzuzufügen, die Sie benötigen.

    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.
    

Konfigurieren von App-Endpunkten

In dieser Phase erstellen Sie Ihre Web-App-Endpunkte und fügen Ihrer Anwendung die Geschäftslogik hinzu.

  1. Erstellen Sie eine Datei mit dem Namen app.py in Ihrem Stammordner.

  2. Importieren Sie die erforderlichen Abhängigkeiten am Anfang der app.py Datei.

    import os
    import requests
    from flask import Flask, render_template
    from identity.flask import Auth
    import app_config
    
  3. Initialisieren Sie Ihre Flask-App, und konfigurieren Sie sie so, dass sie den Sitzungsspeichertyp verwendet, den Sie in Ihrer app_config.py Datei angegeben haben.

    app = Flask(__name__)
    app.config.from_object(app_config)
    
  4. Initialisieren Sie den Client, den App-Client. Eine Flask-Web-App ist ein vertraulicher Client. Wir übergeben den geheimen Clientschlüssel, da vertrauliche Clients ihn sicher speichern können. Unter der Haube ruft die Identitätsbibliothek die ConfidentialClientApplication Klasse der MSAL-Bibliothek auf.

    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. Fügen Sie Ihrer Flask-App die erforderlichen Endpunkte hinzu. Die Web-App verwendet den Autorisierungscodeflow, um den Benutzer anzumelden. Die ms_identity_python MSAL-Wrapperbibliothek hilft bei der Interaktion mit der MSAL-Bibliothek und erleichtert so das Hinzufügen von An- und Abmeldungen zu Ihrer App. Wir fügen eine Indexseite hinzu und schützen sie mit dem Decorator, der login_required von der ms_identity_python Bibliothek bereitgestellt wird. Der login_required Decorator stellt sicher, dass nur authentifizierte Benutzer auf die Indexseite zugreifen können.

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

    Der Benutzer ist garantiert anwesend, da wir diese Ansicht mit @login_required.

Erstellen der App-Vorlagen

Erstellen Sie in Ihrem Stammordner einen Ordner mit dem Namen templates . Erstellen Sie im Vorlagenordner eine Datei mit dem Namen index.html. Dies ist die Startseite der App. Fügen Sie der index.html Datei den folgenden Code hinzu:

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

Ausführen und Testen der Beispielweb-App

  1. Führen Sie in Ihrem Terminal den folgenden Befehl aus:

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

    Sie können den Port Ihrer Wahl verwenden. Dieser Port sollte dem Port des Umleitungs-URI ähneln, den Sie zuvor registriert haben.

  2. Öffnen Sie Ihren Browser, und wechseln Sie dann zu http://localhost:3000. Sie sehen eine Anmeldeseite.

  3. Melden Sie sich mit Ihrem Microsoft-Konto an, indem Sie die folgenden Schritte ausführen. Sie werden aufgefordert, eine E-Mail-Adresse und ein Passwort anzugeben, um sich anzumelden.

  4. Wenn für die Anwendung Bereiche erforderlich sind, wird ein Zustimmungsbildschirm angezeigt. Die Anwendung fordert die Berechtigung an, den Zugriff auf die Daten, auf die Sie Zugriff gewähren, aufrechtzuerhalten und Sie anzumelden. Wählen Sie Akzeptieren aus. Dieser Bildschirm wird nicht angezeigt, wenn keine Bereiche definiert sind.

Nachdem Sie sich angemeldet oder registriert haben, werden Sie zurück zur Web-App umgeleitet. Sie sehen eine Seite, die ähnlich wie im folgenden Screenshot aussieht:

Screenshot des flask-Web-App-Beispiels nach erfolgreicher Authentifizierung.

Wählen Sie Abmelden aus, um sich von der App abzumelden. Sie werden aufgefordert, ein Konto für die Abmeldung zu wählen. Wählen Sie das Konto aus, das Sie zum Anmelden verwendet haben.

Verwenden einer benutzerdefinierten URL-Domäne (optional)

Workforce-Mandanten unterstützen keine benutzerdefinierten URL-Domänen.