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
Tenant esterni (altre informazioni)
In questa esercitazione, si usa l'API Microsoft Graph da un'app Web Python Flask. Nell'esercitazione precedente, hai aggiunto le funzionalità di accesso e disconnessione nell'applicazione. Dopo l'accesso di un utente, l'app acquisisce un token di accesso per chiamare l'API Microsoft Graph.
In questa esercitazione, farai:
- Aggiornare un'app Web Python Flask esistente per acquisire un token di accesso
- Usare il token di accesso per chiamare l'API Microsoft Graph.
Prerequisiti
Completare la procedura descritta in Esercitazione: Aggiungere l'accesso a un'app Web Python Flask usando Microsoft Identity Platform.
Definire gli ambiti e l'endpoint API
In questo esempio viene chiamata l'API Microsoft Graph per ottenere le informazioni sul profilo dell'utente connesso. Se l'app si trova in un tenant aziendale, all'accesso l'utente acconsente agli ambiti richiesti dall'app per accedere all'API Microsoft Graph. Se l'app si trova in un tenant esterno, assicurati di concedere il consenso dell'amministratore per conto degli utenti nel tuo tenant. L'app usa quindi il token di accesso per chiamare l'API e visualizzare i risultati.
Nel file .env, aggiungere l'endpoint che stiamo chiamando e gli ambiti necessari per chiamare l'API di Microsoft Graph:
SCOPE=User.Read
ENDPOINT=https://graph.microsoft.com/v1.0/me
Leggere le nuove configurazioni nell'app aggiornando il file app_config.py .
# other configs go here
SCOPE = os.getenv("SCOPE")
ENDPOINT = os.getenv("ENDPOINT")
Chiamare un'API protetta
Passa l'endpoint API alla homepage. In questo modo è possibile chiamare l'endpoint. Aggiornare la
/route in modo che sia simile a quella illustrata nel frammento di codice seguente:@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", api_endpoint=os.getenv("ENDPOINT") # added this line )Chiamare l'API Microsoft Graph protetta come illustrato nel frammento di codice seguente. Passiamo l'elenco di ambiti che l'app deve usare. Se sono presenti ambiti, il contesto contiene un token di accesso. Il token di accesso viene usato per chiamare l'API downstream. Aggiungere questo codice al file app.py :
@app.route("/call_api") @auth.login_required(scopes=os.getenv("SCOPE", "").split()) def call_downstream_api(*, context): api_result = requests.get( # Use access token to call a web api os.getenv("ENDPOINT"), headers={'Authorization': 'Bearer ' + context['access_token']}, timeout=30, ).json() if context.get('access_token') else "Did you forget to set the SCOPE environment variable?" return render_template('display.html', title="API Response", result=api_result)Se l'app ottiene correttamente un token di accesso, effettua una richiesta HTTP all'API downstream usando il
requests.get(...)metodo . Nella richiesta, l'URL dell'API downstream viene specificato inapp_config.ENDPOINTe il token di accesso passato nelAuthorizationcampo dell'intestazione della richiesta.Una richiesta riuscita all'API downstream (API Microsoft Graph) restituisce una risposta JSON archiviata in una
api_resultvariabile e passata al modello per ildisplay.htmlrendering.
Visualizzare i risultati dell'API
Creare un file denominato display.html nella cartella templates . Questa pagina visualizza il risultato della chiamata all'endpoint di Microsoft Graph. Aggiungere il codice seguente al file display.html :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: API</title>
</head>
<body>
<a href="javascript:window.history.go(-1)">Back</a> <!-- Displayed on top of a potentially large JSON response, so it will remain visible -->
<h1>{{title}}</h1>
<pre>{{ result |tojson(indent=4) }}</pre> <!-- Just a generic json viewer -->
</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.
Chiamare l'API
Selezionare il collegamento Chiama un'API nella home page. L'app chiama l'API Microsoft Graph per ottenere le informazioni sul profilo dell'utente connesso. L'app visualizza il risultato della chiamata all'API.
Selezionare Logout per disconnettersi dall'app. Viene richiesto di selezionare un account da cui disconnettersi. Selezionare l'account usato per accedere.
Materiale di consultazione
Il ms_identity_python astrattizza i dettagli della libreria MSAL. Per altre informazioni, vedere documentazione di MSAL Python. Questo materiale di riferimento consente di comprendere come inizializzare un'app e acquisire token con MSAL Python.