Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:
I tenant della forza lavoro
I tenant esterni (Altre informazioni)
Questa esercitazione illustra come proteggere un'app Web Python Flask.
In questa esercitazione, farai:
- Creare un progetto Python Flask
- Installare le dipendenze necessarie
- Configurare l'app Web Flask per l'uso di Microsoft Identity Platform per l'autenticazione
- Testare l'esperienza di accesso e disconnessione nella tua app web Flask
Prerequisiti
- Inquilino della forza lavoro. È possibile usare la directory predefinita o configurare un nuovo tenant.
- Registrare una nuova app nell'interfaccia di amministrazione di Microsoft Entra, configurata solo per gli account in questa directory organizzativa. Per altri dettagli, vedere Registrare un'applicazione . Registrare i valori seguenti dalla pagina Panoramica dell'applicazione per usarli in un secondo momento:
- ID applicazione (cliente)
- ID della directory (cliente)
- Aggiungere un segreto del client alla registrazione dell'app. Non usare segreti client nelle app di produzione. Usare invece certificati o credenziali federate. Per altre informazioni, vedere Aggiungere credenziali all'applicazione.
- Pitone 3+.
- Visual Studio Code o un altro editor di codice.
Creare un progetto Flask
Creare una cartella per ospitare l'applicazione Flask, ad esempio flask-web-app.
Aprire una finestra della console e passare nella directory della tua cartella dell'app Web Flask usando il comando
cd flask-web-appConfigurare l'ambiente virtuale
A seconda del sistema operativo, eseguire i comandi seguenti per configurare l'ambiente virtuale e attivarlo:
Per il sistema operativo Windows:
py -m venv .venv .venv\scripts\activatePer il sistema operativo macOS o Linux:
python3 -m venv .venv source .venv/bin/activate
Installare le dipendenze delle app
Per installare le dipendenze dell'app, eseguire i comandi seguenti:
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"
La libreria di ms_identity_python installata automaticamente installa Microsoft Authentication Library (MSAL) per Python come dipendenza. MSAL Python è la libreria che consente di autenticare gli utenti e gestire i token di accesso.
Dopo aver installato le librerie necessarie, aggiornare il file dei requisiti eseguendo il comando seguente:
pip freeze > requirements.txt
Configurare l'applicazione per l'autenticazione
Le applicazioni Web che consentono l'accesso degli utenti tramite Microsoft Identity Platform vengono configurate tramite un file di configurazione, con estensione env. In Python Flask deve specificare i valori seguenti:
| Variabile di ambiente | Description |
|---|---|
AUTHORITY |
URL dell'istanza cloud in cui è registrata l'applicazione. Formato: https://{Instance}/{TenantId}. Usare uno dei valori di istanza seguenti:- https://login.microsoftonline.com/ (cloud pubblico di Azure)- https://login.microsoftonline.us/ (Azure US Government)- https://login.microsoftonline.de/ (Microsoft Entra Germania)- https://login.partner.microsoftonline.cn/ (Microsoft Entra China, gestito da 21Vianet) |
TENANT_ID |
Identificatore del tenant in cui è registrata l'app. È preferibile utilizzare l'ID tenant dalla registrazione dell'app, oppure usane uno tra i seguenti: - organizations: consentire l'accesso agli utenti con qualsiasi account aziendale o scolastico- common: accedere agli utenti con qualsiasi account aziendale o dell'istituto di istruzione o account personale Microsoft- consumers: consente di accedere solo agli utenti con un account personale Microsoft |
CLIENT_ID |
Identificatore dell'applicazione (client) ottenuta dalla registrazione dell'app. |
CLIENT_SECRET |
Valore del segreto ottenuto dall'aggiunta di credenziali nell'interfaccia di amministrazione di Microsoft Entra. |
REDIRECT_URI |
URI in cui Microsoft Identity Platform invia i token di sicurezza dopo l'autenticazione. |
Aggiornare il file di configurazione
Creare un file con estensione env nella cartella radice per archiviare in modo sicuro la configurazione dell'app. Il file .env deve contenere le variabili di ambiente seguenti:
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>"Sostituire i segnaposto con i valori seguenti:
- Sostituire
<Enter_your_client_id>con l'ID applicazione (client) dell'app Web client registrata. - Sostituire
<Enter_tenant_id>con l'ID directory (tenant) in cui è stata registrata l'app Web. - Sostituire
<Enter_your_client_secret>con il valore segreto client per l'app Web creata. In questa esercitazione vengono usati segreti a scopo dimostrativo. Nell'ambiente di produzione usare approcci più sicuri, ad esempio certificati o credenziali di identità federate. - Sostituire
<Enter_redirect_uri>con l'URI di reindirizzamento registrato in precedenza. Questo tutorial imposta il percorso dell'URI di reindirizzamento suhttp://localhost:3000/getAToken.
- Sostituire
Creare un file app_config.py per leggere le variabili di ambiente e aggiungere altre configurazioni necessarie.
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.
Configurare gli endpoint dell'app
In questa fase si creano gli endpoint dell'app Web e si aggiunge la logica di business all'applicazione.
Creare un file denominato app.py nella cartella radice.
Importare le dipendenze necessarie all'inizio del file app.py.
import os import requests from flask import Flask, render_template from identity.flask import Auth import app_configInizializzare l'app Flask e configurarla per usare il tipo di archiviazione sessione specificato nel file app_config.py.
app = Flask(__name__) app.config.from_object(app_config)Inizializza il client dell'app. Un'app Web Flask è un client riservato. Il segreto del client viene passato perché i client riservati possono memorizzarlo in modo sicuro. In background, la libreria di identità chiama la classe
ConfidentialClientApplicationdella libreria MSAL.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"] )Aggiungere gli endpoint necessari all'app Flask. L'app Web usa il flusso del codice di autorizzazione per effettuare l'accesso dell'utente. La libreria di supporto MSAL ms_identity_python aiuta nell'interazione con la libreria MSAL, rendendo così più facile l'aggiunta di funzionalità di accesso e disconnessione nella tua app. Si aggiunge una pagina di indice e la si protegge usando l'elemento Decorator
login_requiredfornito dalla libreria di ms_identity_python. L'login_requireddecorator garantisce che solo gli utenti autenticati possano accedere alla pagina di indice.@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", )È garantito che l'utente sia presente perché questa vista è stata decorata con
@login_required.
Creare i modelli di app
Creare una cartella denominata modelli nella cartella radice. Nella cartella templates creare un file denominato index.html. Questa è la home page dell'app. Aggiungere il codice seguente al file 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>
Eseguire e testare l'app Web di esempio
Nel terminale eseguire il comando seguente:
python3 -m flask run --debug --host=localhost --port=3000È possibile usare la porta preferita. Questa porta dovrebbe essere simile alla porta dell'URI di reindirizzamento registrato in precedenza.
Aprire il browser, quindi passare a
http://localhost:3000. Viene visualizzata una pagina di accesso.Accedere con l'account Microsoft seguendo questa procedura. È necessario specificare un indirizzo di posta elettronica e una password per l'accesso.
Se sono presenti ambiti necessari per l'applicazione, viene visualizzata una schermata di consenso. L'applicazione richiede l'autorizzazione per mantenere l'accesso ai dati a cui hai consentito l'accesso e per effettuare l'accesso al tuo account. Selezionare Accetta. Questa schermata non viene visualizzata se non sono definiti ambiti.
Dopo l'accesso o l'iscrizione, si viene reindirizzati all'app Web. Viene visualizzata una pagina simile alla schermata seguente:
Selezionare Logout per disconnettersi dall'app. Viene richiesto di selezionare un account da cui disconnettersi. Selezionare l'account usato per accedere.
Usare un dominio URL personalizzato (facoltativo)
Gli ambienti di lavoro non supportano i domini URL personalizzati.