Condividi tramite


Esercitazione: Chiamare l'API Microsoft Graph da un'app Web Python Flask

Si applica a: cerchio verde con un simbolo di segno di spunta bianco che indica il contenuto seguente si applica ai tenant della forza lavoro. I tenant della forza lavoro Cerchio verde con un simbolo di segno di spunta bianco che indica che il contenuto seguente si applica ai tenant esterni. 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

  1. 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
        )
    
  2. 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 in app_config.ENDPOINT e il token di accesso passato nel Authorization campo dell'intestazione della richiesta.

    Una richiesta riuscita all'API downstream (API Microsoft Graph) restituisce una risposta JSON archiviata in una api_result variabile e passata al modello per il display.html rendering.

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

  1. 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.

  2. Aprire il browser, quindi passare a http://localhost:3000. Viene visualizzata una pagina di accesso.

  3. Accedere con l'account Microsoft seguendo questa procedura. È necessario specificare un indirizzo di posta elettronica e una password per l'accesso.

  4. 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

  1. 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.

  2. 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.