Partager via


Tutoriel : Appeler l’API Microsoft Graph à partir d’une application web Python Flask

S’applique à : cercle vert avec un symbole de coche blanc qui indique que le contenu suivant s’applique aux locataires du personnel. Cercle vert des locataires de main-d’œuvre avec un symbole de coche blanche qui indique que le contenu suivant s’applique aux locataires externes. Locataires externes (en savoir plus)

Dans ce tutoriel, vous appelez l’API Microsoft Graph à partir d’une application web Python Flask. Dans le tutoriel précédent, vous avez ajouté les expériences de connexion et de déconnexion à l’application. Une fois qu’un utilisateur se connecte, l’application acquiert un jeton d’accès pour appeler l’API Microsoft Graph.

Dans ce tutoriel, vous allez :

  • Mettre à jour une application web Python Flask existante pour acquérir un jeton d’accès
  • Utilisez le jeton d’accès pour appeler l’API Microsoft Graph.

Prerequisites

Suivez les étapes du tutoriel : Ajouter une connexion à une application web Python Flask à l’aide de la plateforme d’identités Microsoft.

Définir des étendues et un point de terminaison d’API

Dans cet exemple, nous appelons l’API Microsoft Graph pour obtenir les informations de profil de l’utilisateur connecté. Si votre application se trouve dans un locataire du personnel, lors de la connexion, l’utilisateur consent aux étendues requises par l’application pour accéder à l’API Microsoft Graph. Si votre application se trouve dans un locataire externe, veillez à accorder le consentement administrateur pour le compte des utilisateurs de votre locataire. L’application utilise ensuite le jeton d’accès pour appeler l’API et afficher les résultats.

Dans votre fichier .env , ajoutez le point de terminaison que nous appelons et les étendues requises pour appeler l’API Microsoft Graph :

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

Lisez les nouvelles configurations dans votre application en mettant à jour le fichier app_config.py .

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

Appeler une API protégée

  1. Passez le point de terminaison de l’API à la page d’accueil. Cela vous permet d’appeler votre point de terminaison. Mettez à jour l’itinéraire / pour ressembler à celui indiqué dans l’extrait de code suivant :

    @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. Appelez l’API Microsoft Graph protégée, comme indiqué dans l’extrait de code suivant. Nous transmettons la liste des étendues que notre application doit utiliser. Si des étendues sont présentes, le contexte contient un jeton d’accès. Le jeton d’accès est utilisé pour appeler l’API en aval. Ajoutez ce code au fichier 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)
    

    Si l’application obtient correctement un jeton d’accès, elle effectue une requête HTTP à l’API en aval à l’aide de la requests.get(...) méthode. Dans la requête, notre URL d’API en aval est spécifiée app_config.ENDPOINT et le jeton d’accès transmis dans le Authorization champ de l’en-tête de requête.

    Une requête réussie à l’API en aval (API Microsoft Graph) retourne une réponse JSON stockée dans une api_result variable et transmise au modèle pour le display.html rendu.

Afficher les résultats de l’API

Créez un fichier appelé display.html dans le dossier modèles . Cette page affiche le résultat de l’appel au point de terminaison Microsoft Graph. Ajoutez le code suivant au fichier 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>

Exécuter et tester l’exemple d’application web

  1. Dans votre terminal, exécutez la commande suivante :

    python3 -m flask run --debug --host=localhost --port=3000
    

    Vous pouvez utiliser le port de votre choix. Ce port doit être similaire au port de l’URI de redirection que vous avez enregistré précédemment.

  2. Ouvrez votre navigateur, puis accédez à http://localhost:3000. Vous voyez une page de connexion.

  3. Connectez-vous avec votre compte Microsoft en suivant les étapes. Vous êtes invité à fournir une adresse e-mail et un mot de passe pour vous connecter.

  4. S’il existe des étendues requises par l’application, un écran de consentement est présenté. L’application demande l’autorisation de conserver l’accès aux données que vous autorisez à accéder et à vous connecter. Sélectionnez Accepter. Cet écran n’apparaît pas si aucune étendue n’est définie.

Appeler une API

  1. Sélectionnez le lien Appeler une API dans la page d’accueil. L’application appelle l’API Microsoft Graph pour obtenir les informations de profil de l’utilisateur connecté. L’application affiche le résultat de l’appel à l’API.

  2. Sélectionnez Déconnexion pour vous déconnecter de l’application. Vous êtes invité à choisir un compte à partir duquel vous vous déconnectez. Sélectionnez le compte que vous avez utilisé pour vous connecter.

Documentation de référence

La ms_identity_python extrait les détails de la bibliothèque MSAL. Pour plus d’informations, consultez la documentation MSAL Python. Ce matériel de référence vous aide à comprendre comment initialiser une application et acquérir des jetons à l’aide de MSAL Python.