Självstudie: Logga in användare till en Python Flask-webbapp med hjälp av Microsofts identitetsplattform
Gäller för: Workforce-hyresgäster
externa hyresgäster (läs mer)
Den här handledningen beskriver hur du skyddar en Python Flask-webbapplikation.
I den här handledningen ska du;
- Skapa ett Python Flask-projekt
- Installera nödvändiga beroenden
- Konfigurera flaskwebbappen så att den använder Microsofts identitetsplattform för autentisering
- Testa inloggnings- och utloggningsupplevelsen i Flask-webbappen
Förutsättningar
- Kontrollera att du har en appregistrering i din hyresgäst. Kontrollera att du har följande från din appregistreringsinformation:
- ID:t program (klient) för klientwebbappen som du registrerade.
- ID för Directory (klientorganisation) där du registrerade din webbapplikation.
- Värdet på klient-hemlighet för webbappen som du skapade.
- Python 3+.
- Visual Studio Code eller någon annan kodredigerare.
Skapa ett Flask-projekt
Skapa en mapp som värd för Flask-programmet, till exempel flask-web-app.
Öppna ett konsolfönster och byt katalog till din Flask-webbappmapp med kommandot.
cd flask-web-app
Skapa virtuell miljö
Beroende på operativsystemet kör du följande kommandon för att konfigurera din virtuella miljö och aktivera den:
För Windows-operativsystemet:
py -m venv .venv .venv\scripts\activate
För macOS- eller Linux-operativsystem:
python3 -m venv .venv source .venv/bin/activate
Installera appens beroenden
Installera appberoenden genom att köra följande kommandon:
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"
Det bibliotek som du installerar, ms_identity_python, installerar automatiskt Microsoft Authentication Library (MSAL) för Python som ett beroende. MSAL Python är det bibliotek där du kan autentisera användare och hantera deras åtkomsttoken.
När du har installerat de bibliotek som krävs uppdaterar du kravfilen genom att köra följande kommando:
pip freeze > requirements.txt
Lägg till dina konfigurationer
Skapa en .env*-fil i rotmappen för att lagra appens konfiguration på ett säkert sätt. Filen .env ska innehålla följande miljövariabler:
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>"
Ersätt platshållarna med följande värden:
- Ersätt
<Enter_your_client_id>
med program-ID (klient)-ID:t för klientwebbappen som du registrerade. - Ersätt
<Enter_tenant_id>
med -katalog-ID (hyresgäst) som du registrerade din webbapp i. - Ersätt
<Enter_your_client_secret>
med värdet Klienthemlighet för webbappen som du skapade. I den här handledningen använder vi hemligheter i demonstrationssyfte. I produktion använder du säkrare metoder som certifikat eller federerade identitetsautentiseringsuppgifter. - Ersätt
<Enter_redirect_uri>
med den omdirigerings-URI som du registrerade tidigare. I den här självstudien ställs omdirigerings-URI-sökvägen in tillhttp://localhost:3000/getAToken
.
- Ersätt
Skapa en app_config.py fil för att läsa miljövariablerna och lägga till andra konfigurationer som du behöver.
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.
Konfigurera appslutpunkter
I det här skedet skapar du dina webbappslutpunkter och lägger till affärslogik i ditt program.
Skapa en fil med namnet app.py i rotmappen.
Importera nödvändiga beroenden överst i filen app.py.
import os import requests from flask import Flask, render_template from identity.flask import Auth import app_config
Initiera Flask-appen och konfigurera den så att den använder den sessionslagringstyp som du angav i din app_config.py-fil.
app = Flask(__name__) app.config.from_object(app_config)
Initiera klienten för appklienten. En Flask-webbapp är en konfidentiell klient. Vi skickar klienthemligheten eftersom konfidentiella klienter kan lagra den på ett säkert sätt. Under huven använder Identitetsbiblioteket MSAL-bibliotekets
ConfidentialClientApplication
-klass.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"] )
Lägg till de slutpunkter som krävs i Flask-appen. Webbappen använder auktoriseringskodflödet för att logga in användaren. Det ms_identity_python MSAL-omslutningsbiblioteket hjälper dig att interagera med MSAL-biblioteket, vilket gör det enklare att lägga till inloggning och logga ut till din app. Vi lägger till en indexsida och skyddar den med hjälp av
login_required
dekoratör som tillhandahålls av ms_identity_python-biblioteket. Denlogin_required
-dekoratören säkerställer att endast auktoriserade användare kan komma åt indexsidan.@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", )
Användaren är garanterad att vara närvarande eftersom vi har dekorerat den här vyn med
@login_required
.
Skapa appmallarna
Skapa en mapp med namnet mallar i rotmappen. I mappen mallar skapar du en fil med namnet index.html. Det här är appens startsida. Lägg till följande kod i filen 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>
Köra och testa exempelwebbappen
Kör följande kommando i terminalen:
python3 -m flask run --debug --host=localhost --port=3000
Du kan använda valfri port. Den här porten bör likna porten för den omdirigerings-URI som du registrerade tidigare.
Öppna webbläsaren och gå sedan till
http://localhost:3000
. Du ser en inloggningssida.Logga in med ditt Microsoft-konto genom att följa stegen. Du uppmanas att ange en e-postadress och ett lösenord för att logga in.
Om det finns några omfång som krävs av programmet visas en samtyckesskärm. Programmet begär behörighet att behålla åtkomsten till data som du tillåter åtkomst till och för att logga in dig. Välj Acceptera. Den här skärmen visas inte om inga omfång har definierats.
När du har loggat in eller registrerat dig omdirigeras du tillbaka till webbappen. Du ser en sida som liknar följande skärmbild:
Välj Utloggning för att logga ut från appen. Du uppmanas att välja ett konto att logga ut från. Välj det konto som du använde för att logga in.
Använda anpassad URL-domän (valfritt)
Personalklienter stöder inte anpassade URL-domäner.