Créer des applications Python avec Microsoft Graph et l’authentification d’application uniquement
Ce tutoriel vous apprend à créer une application console Python qui utilise l’API Microsoft Graph pour accéder aux données à l’aide de l’authentification d’application uniquement. L’authentification d’application uniquement est un bon choix pour les services en arrière-plan ou les applications qui doivent accéder aux données de tous les utilisateurs d’une organisation.
Remarque
Pour savoir comment utiliser Microsoft Graph pour accéder aux données au nom d’un utilisateur, consultez ce tutoriel sur l’authentification de l’utilisateur (déléguée).
Dans ce didacticiel, vous allez :
Conseil
Au lieu de suivre ce didacticiel, vous pouvez télécharger ou cloner le dépôt GitHub et suivre les instructions du fichier LISEZ-MOI pour inscrire une application et configurer le projet.
Configuration requise
Avant de commencer ce didacticiel, python et pip doivent être installés sur votre ordinateur de développement.
Vous devez également disposer d’un compte professionnel ou scolaire Microsoft avec le rôle Administrateur général. Si vous n’avez pas de locataire Microsoft 365, vous pouvez être éligible pour un client via le Programme pour les développeurs Microsoft 365 ; Pour plus d’informations, consultez la FAQ. Vous pouvez également vous inscrire à un essai gratuit de 1 mois ou acheter un plan Microsoft 365.
Remarque
Ce tutoriel a été écrit avec Python version 3.10.4 et pip version 20.0.2. Les étapes décrites dans ce guide peuvent fonctionner avec d’autres versions, mais elles n’ont pas été testées.
Inscrire l’application sur le portail
Dans cet exercice, vous allez inscrire une nouvelle application dans Azure Active Directory pour activer l’authentification d’application uniquement. Vous pouvez inscrire une application à l’aide du Centre d’administration Microsoft Entra ou à l’aide du Kit de développement logiciel (SDK) Microsoft Graph PowerShell.
Inscrire l’application pour l’authentification d’application uniquement
Dans cette section, vous allez inscrire une application qui prend en charge l’authentification d’application uniquement à l’aide du flux d’informations d’identification du client.
Ouvrez un navigateur et accédez au Centre d’administration Microsoft Entra et connectez-vous à l’aide d’un compte d’administrateur général.
Sélectionnez Id Microsoft Entra dans le volet de navigation de gauche, développez Identité, Applications, puis inscriptions d’applications.
Sélectionnez Nouvelle inscription. Entrez un nom pour votre application, par exemple .
Graph App-Only Auth Tutorial
Définissez Types de comptes pris en chargesur Comptes dans cet annuaire organisationnel uniquement.
Laissez Redirect URI vide.
Sélectionner Inscription. Dans la page Vue d’ensemble de l’application, copiez la valeur de l’ID d’application (client) et de l’ID d’annuaire (locataire) et enregistrez-les. Vous aurez besoin de ces valeurs à l’étape suivante.
Sélectionnez Autorisations de l’API dans le volet de navigation gauche sous Gérer.
Supprimez l’autorisation User.Read par défaut sous Autorisations configurées en sélectionnant les points de suspension (...) dans sa ligne et en sélectionnant Supprimer l’autorisation.
Sélectionnez Ajouter une autorisation, puis Microsoft Graph.
Sélectionnez Autorisations d’application.
Sélectionnez User.Read.All, puis Ajouter des autorisations.
Sélectionnez Accorder le consentement de l’administrateur pour..., puis sélectionnez Oui pour fournir le consentement de l’administrateur pour l’autorisation sélectionnée.
Sélectionnez Certificats et secrets sous Gérer, puis sélectionnez Nouvelle clé secrète client.
Entrez une description, choisissez une durée, puis sélectionnez Ajouter.
Copiez le secret à partir de la colonne Valeur . Vous en aurez besoin dans les étapes suivantes.
Importante
Ce secret client n’apparaîtra plus jamais, aussi veillez à le copier maintenant.
Remarque
Notez que, contrairement aux étapes de l’inscription à l’authentification utilisateur, dans cette section, vous avez configuré des autorisations Microsoft Graph sur l’inscription de l’application. Cela est dû au fait que l’authentification d’application uniquement utilise le flux d’informations d’identification du client, ce qui nécessite que les autorisations soient configurées lors de l’inscription de l’application. Pour plus d’informations, consultez l’étendue .default .
Créer une application console Python
Commencez par créer un fichier Python.
Créez un fichier nommé main.py et ajoutez le code suivant.
print ('Hello world!')
Enregistrez le fichier et utilisez la commande suivante pour exécuter le fichier.
python3 main.py
Si cela fonctionne, l’application doit générer
Hello world!
.
Installer les dépendances
Avant de continuer, ajoutez des dépendances supplémentaires que vous utiliserez ultérieurement.
- Bibliothèque de client Azure Identity pour Python afin d’authentifier l’utilisateur et d’acquérir des jetons d’accès.
- Kit de développement logiciel (SDK) Microsoft Graph pour Python (préversion) pour effectuer des appels à Microsoft Graph.
Exécutez les commandes suivantes dans votre interface CLI pour installer les dépendances.
python3 -m pip install azure-identity
python3 -m pip install msgraph-sdk
Charger les paramètres de l’application
Dans cette section, vous allez ajouter les détails de l’inscription de votre application au projet.
Créez un fichier dans le même répertoire que main.py nommé config.cfg et ajoutez le code suivant.
[azure] clientId = YOUR_CLIENT_ID_HERE clientSecret = YOUR_CLIENT_SECRET_HERE tenantId = YOUR_TENANT_ID_HERE
Mettez à jour les valeurs en fonction du tableau suivant.
Paramètre Valeur clientId
ID client de l’inscription de votre application clientSecret
Clé secrète client de l’inscription de votre application tenantId
ID de locataire de votre organisation Conseil
Si vous le souhaitez, vous pouvez définir ces valeurs dans un fichier distinct nommé config.dev.cfg.
Concevoir l’application
Dans cette section, vous allez créer un menu simple basé sur la console.
Créez un fichier nommé graph.py et ajoutez le code suivant à ce fichier.
# Temporary placeholder class Graph: def __init__(self, config): self.settings = config
Ce code est un espace réservé. Vous allez implémenter la
Graph
classe dans la section suivante.Ouvrez main.py et remplacez tout son contenu par le code suivant.
import asyncio import configparser from msgraph.generated.models.o_data_errors.o_data_error import ODataError from graph import Graph async def main(): print('Python Graph App-Only Tutorial\n') # Load settings config = configparser.ConfigParser() config.read(['config.cfg', 'config.dev.cfg']) azure_settings = config['azure'] graph: Graph = Graph(azure_settings) choice = -1 while choice != 0: print('Please choose one of the following options:') print('0. Exit') print('1. Display access token') print('2. List users') print('3. Make a Graph call') try: choice = int(input()) except ValueError: choice = -1 try: if choice == 0: print('Goodbye...') elif choice == 1: await display_access_token(graph) elif choice == 2: await list_users(graph) elif choice == 3: await make_graph_call(graph) else: print('Invalid choice!\n') except ODataError as odata_error: print('Error:') if odata_error.error: print(odata_error.error.code, odata_error.error.message)
Ajoutez les méthodes d’espace réservé suivantes à la fin du fichier. Vous les implémenterez dans les étapes ultérieures.
async def display_access_token(graph: Graph): # TODO return async def list_users(graph: Graph): # TODO return async def make_graph_call(graph: Graph): # TODO return
Ajoutez la ligne suivante à appeler
main
à la fin du fichier.# Run main asyncio.run(main())
Cela implémente un menu de base et lit le choix de l’utilisateur à partir de la ligne de commande.
Ajouter l’authentification d’application uniquement
Dans cette section, vous allez ajouter l’authentification d’application uniquement à l’application. Cela est nécessaire pour obtenir le jeton d’accès OAuth nécessaire pour appeler Microsoft Graph. Dans cette étape, vous allez intégrer la bibliothèque de client Azure Identity pour Python dans l’application et configurer l’authentification pour le Kit de développement logiciel (SDK) Microsoft Graph pour Python (préversion) .
La bibliothèque Azure Identity fournit un certain nombre de TokenCredential
classes qui implémentent des flux de jetons OAuth2. Le Kit de développement logiciel (SDK) Microsoft Graph utilise ces classes pour authentifier les appels à Microsoft Graph.
Configurer le client Graph pour l’authentification d’application uniquement
Dans cette section, vous allez utiliser la ClientSecretCredential
classe pour demander un jeton d’accès à l’aide du flux d’informations d’identification du client.
Ouvrez graph.py et remplacez tout son contenu par le code suivant.
from configparser import SectionProxy from azure.identity.aio import ClientSecretCredential from msgraph import GraphServiceClient from msgraph.generated.users.users_request_builder import UsersRequestBuilder class Graph: settings: SectionProxy client_credential: ClientSecretCredential app_client: GraphServiceClient def __init__(self, config: SectionProxy): self.settings = config client_id = self.settings['clientId'] tenant_id = self.settings['tenantId'] client_secret = self.settings['clientSecret'] self.client_credential = ClientSecretCredential(tenant_id, client_id, client_secret) self.app_client = GraphServiceClient(self.client_credential) # type: ignore
Ce code déclare deux propriétés privées, un
ClientSecretCredential
objet et unGraphServiceClient
objet . La__init__
fonction crée une instance deClientSecretCredential
, puis utilise cette instance pour créer une nouvelle instance deGraphServiceClient
. Chaque fois qu’un appel d’API est effectué à Microsoft Graph via ,app_client
il utilise les informations d’identification fournies pour obtenir un jeton d’accès.Ajoutez la fonction suivante à graph.py.
async def get_app_only_token(self): graph_scope = 'https://graph.microsoft.com/.default' access_token = await self.client_credential.get_token(graph_scope) return access_token.token
Remplacez la fonction vide
display_access_token
dans main.py par ce qui suit.async def display_access_token(graph: Graph): token = await graph.get_app_only_token() print('App-only token:', token, '\n')
Générez et exécutez l’application. Entrez
1
lorsque vous êtes invité à entrer une option. L’application affiche un jeton d’accès.Python Graph App-Only Tutorial Please choose one of the following options: 0. Exit 1. Display access token 2. List users 3. Make a Graph call 1 App-only token: eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVDTzRYOWtKYlNLVjVkRzJGenJqd2xvVUcwWS...
Conseil
À des fins de validation et de débogage uniquement, vous pouvez décoder les jetons d’accès d’application uniquement à l’aide de l’analyseur de jetons en ligne de Microsoft à l’adresse https://jwt.ms. Cela peut être utile si vous rencontrez des erreurs de jeton lors de l’appel de Microsoft Graph. Par exemple, vérifier que la revendication dans le
role
jeton contient les étendues d’autorisation Microsoft Graph attendues.
Répertorier des utilisateurs
Dans cette section, vous allez ajouter la possibilité de répertorier tous les utilisateurs de votre instance Azure Active Directory à l’aide de l’authentification d’application uniquement.
Ajoutez la fonction suivante à graph.py.
async def get_users(self): query_params = UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( # Only request specific properties select = ['displayName', 'id', 'mail'], # Get at most 25 results top = 25, # Sort by display name orderby= ['displayName'] ) request_config = UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( query_parameters=query_params ) users = await self.app_client.users.get(request_configuration=request_config) return users
Remplacez la fonction vide
list_users
dans main.py par ce qui suit.async def list_users(graph: Graph): users_page = await graph.get_users() # Output each users's details if users_page and users_page.value: for user in users_page.value: print('User:', user.display_name) print(' ID:', user.id) print(' Email:', user.mail) # If @odata.nextLink is present more_available = users_page.odata_next_link is not None print('\nMore users available?', more_available, '\n')
Exécutez l’application et choisissez l’option 2 pour répertorier les utilisateurs.
Please choose one of the following options: 0. Exit 1. Display access token 2. List users 3. Make a Graph call 2 User: Adele Vance ID: 05fb57bf-2653-4396-846d-2f210a91d9cf Email: AdeleV@contoso.com User: Alex Wilber ID: a36fe267-a437-4d24-b39e-7344774d606c Email: AlexW@contoso.com User: Allan Deyoung ID: 54cebbaa-2c56-47ec-b878-c8ff309746b0 Email: AllanD@contoso.com User: Bianca Pisani ID: 9a7dcbd0-72f0-48a9-a9fa-03cd46641d49 Email: None User: Brian Johnson (TAILSPIN) ID: a8989e40-be57-4c2e-bf0b-7cdc471e9cc4 Email: BrianJ@contoso.com ... More users available? True
Explication du code
Considérez le code dans la get_users
fonction .
- Il obtient une collection d’utilisateurs
- Il utilise
$select
pour demander des propriétés spécifiques - Il utilise
$top
pour limiter le nombre d’utilisateurs retournés - Il utilise
$orderBy
pour trier la réponse
Facultatif : ajouter votre propre code
Dans cette section, vous allez ajouter vos propres fonctionnalités Microsoft Graph à l’application. Il peut s’agir d’un extrait de code de la documentation Microsoft Graph ou de l’Explorateur Graph, ou du code que vous avez créé. Cette section est facultative.
Mettre à jour l’application
Ajoutez la fonction suivante à graph.py.
async def make_graph_call(self): # INSERT YOUR CODE HERE return
Remplacez la fonction vide
list_inbox
dans main.py par ce qui suit.async def make_graph_call(graph: Graph): await graph.make_graph_call()
Choisir une API
Recherchez une API dans Microsoft Graph que vous souhaitez essayer. Par exemple, l’API Créer un événement . Vous pouvez utiliser l’un des exemples de la documentation de l’API ou créer votre propre demande d’API.
Configuration des autorisations
Consultez la section Autorisations de la documentation de référence de l’API choisie pour voir quelles méthodes d’authentification sont prises en charge. Certaines API ne prennent pas en charge les comptes Microsoft personnels ou d’application uniquement, par exemple.
- Pour appeler une API avec l’authentification utilisateur (si l’API prend en charge l’authentification utilisateur (déléguée), consultez le tutoriel sur l’authentification utilisateur (déléguée).
- Pour appeler une API avec l’authentification d’application uniquement (si l’API la prend en charge), ajoutez l’étendue d’autorisation requise dans le Centre d’administration Azure AD.
Ajouter votre code
Copiez votre code dans la make_graph_call
fonction dans graph.py.
Félicitations !
Vous avez terminé le tutoriel Python Sur Microsoft Graph. Maintenant que vous disposez d’une application opérationnelle qui appelle Microsoft Graph, vous pouvez expérimenter et ajouter de nouvelles fonctionnalités.
- Découvrez comment utiliser l’authentification utilisateur (déléguée) avec le Kit de développement logiciel (SDK) Python Microsoft Graph.
- Consultez la vue d’ensemble de Microsoft Graph pour voir toutes les données accessibles avec Microsoft Graph.
Exemples Python
Vous avez un défi avec cette section ? Si c'est le cas, faites-nous part de vos commentaires pour que nous puissions l'améliorer.