Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: Werknemerstenants
Externe tenants (meer informatie)
In deze zelfstudie wordt u begeleid bij het beveiligen van een Python Flask-web-app.
In deze handleiding leert u:
- Een Python Flask-project maken
- De vereiste afhankelijkheden installeren
- Uw Flask-web-app configureren voor het gebruik van het Microsoft Identity Platform voor verificatie
- De aanmeldings- en afmeldingservaring testen in uw Flask-web-app
Voorwaarden
- Een personeelstenant. U kunt uw standaardmap gebruiken of een nieuwe tenant instellen.
- Registreer een nieuwe app in het Microsoft Entra-beheercentrum, alleen geconfigureerd voor accounts in deze organisatiemap. Raadpleeg Een toepassing registreren voor meer informatie. Noteer de volgende waarden op de pagina Overzicht van de toepassing voor later gebruik:
- Applicatie (client) ID
- ID van de directory (tenant)
- Voeg een clientgeheim toe aan uw app-registratie. Gebruik geen clientgeheimen in productie-apps. Gebruik in plaats daarvan certificaten of federatieve referenties. Voor meer informatie, zie referenties toevoegen aan uw toepassing.
- Python 3+.
- Visual Studio Code of een andere code-editor.
Een Flask-project maken
Maak een map voor het hosten van uw Flask-toepassing, zoals flask-web-app.
Open een consolevenster en verander van directory naar de map van uw Flask-web-app met behulp van de opdracht.
cd flask-web-app
Virtuele omgeving instellen
Voer, afhankelijk van uw besturingssysteem, de volgende opdrachten uit om uw virtuele omgeving in te stellen en te activeren:
Voor windows-besturingssysteem:
py -m venv .venv .venv\scripts\activate
Voor macOS- of Linux-besturingssysteem:
python3 -m venv .venv source .venv/bin/activate
App-afhankelijkheden installeren
Voer de volgende opdrachten uit om app-afhankelijkheden te installeren:
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"
De ms_identity_python-bibliotheek die u installeert, installeert Microsoft Authentication Library (MSAL) voor Python automatisch als afhankelijkheid. MSAL Python is de bibliotheek waarmee u gebruikers kunt verifiëren en hun toegangstokens kunt beheren.
Nadat u de vereiste bibliotheken hebt geïnstalleerd, werkt u het vereistenbestand bij door de volgende opdracht uit te voeren:
pip freeze > requirements.txt
Uw configuraties toevoegen
Maak een .env*-bestand in uw hoofdmap om de configuratie van uw app veilig op te slaan. Uw .env-bestand moet de volgende omgevingsvariabelen bevatten:
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>"
Vervang de tijdelijke aanduidingen door de volgende waarden:
- Vervang
<Enter_your_client_id>
door de id van de Toepassing (client) van de clientweb-app die u hebt geregistreerd. - Vervang
<Enter_tenant_id>
door de Directory-ID (Tenant-ID) waar u uw web-app hebt geregistreerd. - Vervang door
<Enter_your_client_secret>
de waarde van het clientgeheim voor de web-app die u hebt gemaakt. In deze zelfstudie gebruiken we geheimen voor demonstratiedoeleinden. Gebruik in productie veiligere benaderingen, zoals certificaten of federatieve identiteitsreferenties. - Vervang
<Enter_redirect_uri>
door de omleidings-URI die u eerder hebt geregistreerd. In deze handleiding wordt het omleidings-URI-pad ingesteld ophttp://localhost:3000/getAToken
.
- Vervang
Maak een app_config.py-bestand om de omgevingsvariabelen te lezen en voeg andere configuraties toe die u nodig hebt.
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-eindpunten configureren
In deze fase maakt u uw web-app-eindpunten en voegt u de bedrijfslogica toe aan uw toepassing.
Maak een bestand met de naam app.py in de hoofdmap.
Importeer vereiste afhankelijkheden boven aan het app.py-bestand .
import os import requests from flask import Flask, render_template from identity.flask import Auth import app_config
Initialiseer uw Flask-app en configureer deze voor het gebruik van het sessieopslagtype dat u hebt opgegeven in uw app_config.py-bestand .
app = Flask(__name__) app.config.from_object(app_config)
Initialiseer de client van de app. Een Flask-web-app is een vertrouwelijke client. We geven het clientgeheim door, omdat vertrouwelijke clients het veilig kunnen opslaan. Achter de schermen roept de identiteitsbibliotheek de
ConfidentialClientApplication
klasse van de MSAL-bibliotheek aan.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"] )
Voeg de vereiste eindpunten toe aan uw Flask-app. De web-app gebruikt de autorisatiecodestroom om de gebruiker aan te melden. De ms_identity_python MSAL wrapper-bibliotheek helpt bij de interactie met de MSAL-bibliotheek, waardoor het eenvoudiger is om zich aan te melden en af te melden bij uw app. We voegen een indexpagina toe en beveiligen deze met behulp van de
login_required
decorator van de ms_identity_python-bibliotheek . Delogin_required
decorator zorgt ervoor dat alleen geverifieerde gebruikers toegang hebben tot de indexpagina.@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", )
De gebruiker is gegarandeerd aanwezig omdat we deze weergave hebben ingericht met
@login_required
.
De app-sjablonen maken
Maak een map met de naam sjablonen in de hoofdmap. Maak in de map sjablonen een bestand met de naam index.html. Dit is de startpagina van de app. Voeg de volgende code toe aan het index.html-bestand :
<!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>
De voorbeeldweb-app uitvoeren en testen
Voer in de terminal de volgende opdracht uit:
python3 -m flask run --debug --host=localhost --port=3000
U kunt de poort van uw keuze gebruiken. Deze poort moet vergelijkbaar zijn met de poort van de omleidings-URI die u eerder hebt geregistreerd.
Open uw browser en ga vervolgens naar
http://localhost:3000
. U ziet een aanmeldingspagina.Meld u aan met uw Microsoft-account door de stappen te volgen. U wordt gevraagd een e-mailadres en wachtwoord op te geven om u aan te melden.
Als de toepassing bepaalde bereiken nodig heeft, wordt er een toestemmingsscherm weergegeven. De toepassing vraagt toestemming om toegang te behouden tot gegevens die u toestaat en om u aan te melden. Selecteer Accepteren. Dit scherm wordt niet weergegeven als er geen scopes zijn gedefinieerd.
Nadat u zich hebt aangemeld of zich hebt geregistreerd, wordt u teruggeleid naar de web-app. U ziet een pagina die er ongeveer als volgt uitziet:
Selecteer Afmelden om u af te melden bij de app. U wordt gevraagd een account te kiezen om u af te melden. Selecteer het account dat u hebt gebruikt om u aan te melden.
Aangepast URL-domein gebruiken (optioneel)
Workforce-tenants bieden geen ondersteuning voor aangepaste URL-domeinen.