Delen via


Zelfstudie: Microsoft Graph API aanroepen vanuit een Python Flask-web-app

Van toepassing op: Groene cirkel met een wit vinkje dat aangeeft dat de volgende inhoud van toepassing is op werknemerstenants. Werknemerstenants Groene cirkel met een wit vinkje dat aangeeft dat de volgende inhoud van toepassing is op externe tenants. Externe tenants (meer informatie)

In deze zelfstudie roept u Microsoft Graph API aan vanuit een Python Flask-web-app. In de vorige tutorialhebt u de aanmeld- en afmeldervaringen toegevoegd aan de applicatie. Zodra een gebruiker zich aanmeldt, verkrijgt de app een toegangstoken om Microsoft Graph API aan te roepen.

In deze zelfstudie gaat u het volgende doen:

  • Een bestaande Python Flask-web-app bijwerken om een toegangstoken te verkrijgen
  • Gebruik het toegangstoken om Microsoft Graph API aan te roepen.

Voorwaarden

Voltooi de stappen in Handleiding: Inloggen toevoegen aan een Python Flask webapp met behulp van Microsoft Identity Platform.

Bereiken en API-eindpunt definiëren

In dit voorbeeld roepen we de Microsoft Graph API aan om de profielgegevens van de aangemelde gebruiker op te halen. Als uw app zich in een personeelstenant bevindt, geeft de gebruiker bij aanmelding toestemming voor de bereiken die de app nodig heeft voor toegang tot de Microsoft Graph API. Als uw app zich in een externe tenant bevindt, moet u ervoor zorgen dat u beheerderstoestemming verlenen namens gebruikers in uw tenant. De app gebruikt vervolgens het toegangstoken om de API aan te roepen en de resultaten weer te geven.

Voeg in uw .env-bestand het eindpunt toe waar we een oproep naar doen en de scopes die nodig zijn om de Microsoft Graph API aan te roepen.

SCOPE=User.Read
ENDPOINT=https://graph.microsoft.com/v1.0/me

Lees de nieuwe configuraties in uw app door het app_config.py-bestand bij te werken.

# other configs go here
SCOPE = os.getenv("SCOPE")
ENDPOINT = os.getenv("ENDPOINT")

Een beveiligde API aanroepen

  1. Geef het API-eindpunt door aan de startpagina. Hiermee kunt u uw eindpunt aanroepen. Werk de / route bij zodat deze er als volgt uitziet in het volgende codefragment:

    @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. Roep de beveiligde Microsoft Graph API aan, zoals wordt weergegeven in het volgende codefragment. We dragen de lijst met scopes over die onze app moet gebruiken. Als er scopes aanwezig zijn, bevat de context een toegangstoken. Het toegangstoken wordt gebruikt om de downstream-API aan te roepen. Voeg deze code toe aan het app.py-bestand:

    @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)
    

    Als de app een toegangstoken heeft verkregen, wordt er een HTTP-aanvraag naar de downstream-API verzonden met behulp van de methode requests.get(...). In de aanvraag wordt onze downstream-API-URL opgegeven in app_config.ENDPOINT en het toegangstoken dat is doorgegeven in het Authorization veld van de aanvraagheader.

    Een geslaagde aanvraag voor de downstream-API (Microsoft Graph API) retourneert een JSON-antwoord dat is opgeslagen in een api_result variabele en wordt doorgegeven aan de display.html-sjabloon voor rendering.

API-resultaten weergeven

Maak een bestand met de naam display.html in de map sjablonen. Op deze pagina wordt het resultaat van de aanroep naar het Microsoft Graph-eindpunt weergegeven. Voeg de volgende code toe aan het display.html-bestand:

<!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>

De voorbeeldweb-app uitvoeren en testen

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

  2. Open uw browser en ga vervolgens naar http://localhost:3000. U ziet een aanmeldingspagina.

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

  4. Als er scopes nodig zijn voor de toepassing, 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.

API aanroepen

  1. Selecteer de koppeling Een API- aanroepen op de startpagina. De app roept de Microsoft Graph API aan om de profielgegevens van de aangemelde gebruiker op te halen. De app geeft het resultaat weer van de aanroep naar de API.

  2. Selecteer afmelden om u af te melden van 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.

Referentiemateriaal

De ms_identity_python abstracteert de details van de MSAL-bibliotheek. Zie MSAL Python-documentatievoor meer informatie. Dit referentiemateriaal helpt u inzicht te krijgen in hoe u een app initialiseert en tokens verkrijgt met BEHULP van MSAL Python.