Créer une application Azure pour utiliser l’API Microsoft Graph

Si vous êtes un administrateur système et que vous maîtrisez un peu la programmation, ce tutoriel est fait pour vous. D’ailleurs, même si vous n’êtes pas un as de la programmation, cet article devrait quand même vous aider. Nous allons voir comment créer une application dans Microsoft Azure pour pouvoir utiliser l’API Microsoft Graph. Si vous êtes arrivés ici vous savez sûrement que c’est cette API Microsoft Graph, mais je vais quand même vous le préciser pour que tout le monde comprenne bien les possibilités.

Microsoft Graph est une passerelle unifiée vers les données et services Microsoft 365. Il permet aux développeurs d’accéder, via une seule API, à des informations riches provenant de services comme Outlook, OneDrive, Teams, Excel, Azure Active Directory et bien plus encore. Grâce à Microsoft Graph, il devient possible de créer des applications intelligentes qui interagissent avec les utilisateurs, les fichiers, les messages, les réunions ou encore les groupes, de manière sécurisée et en temps réel. Cet outil puissant est au cœur de nombreuses intégrations et automatisations modernes avec l’écosystème Microsoft.

Voilà pour le topo. Dans mon cas, j’avais besoin de récupérer automatiquement des fichiers à jour sur certains sites Microsoft SharePoint. Avant de pouvoir faire un script, il faut donc créer une application dans Azure, créer des tokens d’authentification et lui attribuer des droits les plus précis possibles. Pour commencer, il va donc falloir vous connecter sur votre portail Azure avec votre compte administrateur puis vous rendre sur l’inscription d’application. Si vous passez par l’accueil général sans utiliser mon lien, sur tous les services, il faut cliquer sur « Inscriptions d’applications » :

Vous devriez normalement avoir cette vue et vous pouvez cliquer sur « Nouvelle inscription » :  

Une fois sur le formulaire « Inscrire une application » vous pouvez donner un nom interne à votre application et décider de qui pourra utiliser l’API. Dans mon cas, je laisse la valeur par défaut « Comptes dans cet annuaire d’organisation uniquement » mais vous avez d’autres options que l’on ne va pas explorer ici. Enfin, je n’ajoute pas d’URI de redirection pour le moment.

Après la création de votre application, vous arrivez alors sur cette page qui donne des informations intéressantes et qui va nous être utile pour la suite. J’y reviendrai plus tard. Il s’agit des ID que j’ai volontairement masqué sur la capture d’écran suivante : 

Maintenant que notre application qui est créée, nous allons pouvoir lui donner des droits pour lire ou écrire sur l’environnement Microsoft 365. Pour aller au bout de ce tutoriel et avoir un POC fonctionnel en Python, je vais lui donner un droit tout simple : la lecture de l’ensemble des utilisateurs. Cliquez sur « Ajouter une autorisation », le menu à droite va s’ouvrir et ensuite aller dans API Microsoft Graph :

Vous avez alors 2 choix : autorisation déléguées et autorisation d’application. Pour notre besoin il s’agit d’une nouvelle autorisation d’application. 

Nous pouvons alors ajouter notre nouvelle permission User.Read.All qui va nous permettre de lire l’annuaire. Si vous connaissez un peu les autorisations vous allez pouvoir utiliser la barre de recherche pour aller plus vite.

Une fois la nouvelle permission ajoutée, il manque encore une étape, il faut lui accorder un consentement d’administrateur. Cliquez sur le bouton correspondant pour valider cette étape, car sinon vous ne pourrez pas utiliser cette nouvelle permission via l’API. Une fois que c’est fait, tout passe au vert comme sur la capture d’écran suivante : 

Il ne nous manque plus qu’une dernière étape avant de pouvoir tester la connexion à l’API Microsoft Graph avec notre script Python basique, il faut créer les tokens d’authentification. Pour cela rendez-vous dans certificats & secrets : 

Allez sur Secrets client plus cliquez sur Nouveau secret client pour afficher le formulaire suivant qui va vous permet de créer les clés : 

Vous pouvez alors lui donner un nom explicite pour pouvoir facilement l’identifier dans le futur ainsi qu’une date d’expiration qui est obligatoire. Vous pouvez la pousser jusqu’à 24 mois maximum ensuite, il faudra régénérer une nouvelle clé pour pouvoir continuer à utiliser l’API Microsoft Graph. Il est aussi possible de faire démarrer la validité de ces jetons d’authentifications à une date ultérieure si votre projet démarre par exemple dans une semaine. Attention, il faut bien stocker la valeur de votre secret car il ne s’affiche qu’une fois. Si vous perdez cette valeur de votre clé, il faudra créer une nouvelle clé. 

Maintenant que nous avons tout ce qu’il nous faut, on va pouvoir enfin tester pour la première fois l’API Microsoft Graph avec un script Python basique. Bien évidemment, vous pouvez utiliser n’importe quel langage de programmation étant donné qu’il s’agit d’une API web RESTful mais ici, on va rester dans le plus courant et portable pour illustrer cet article. J’ai donc choisi Python. 

La première étape est bien évidemment de créer un environnement virtuel avec venv (ou celui de votre choix). Je vous laisse parcourir le lien précédent pour en savoir plus, car ce n’est pas le but ici d’expliquer ce concept. Une fois que notre environnement virtuel est créé, pour pouvoir utiliser le script, on va juste ajouter les dépendances dont nous avons besoin pour le faire tourner à l’aide d’une commande pip : 

pip install requests msal python-dotenv

Cette commande installera les bibliothèques Python suivantes :

  • requests : Pour effectuer des requêtes HTTP et interagir avec l’API Microsoft Graph.
  • msal (Microsoft Authentication Library) : Pour gérer l’authentification et obtenir des jetons d’accès pour Microsoft Graph.
  • python-dotenv : Pour charger les variables d’environnement définies dans un fichier .env. »

L’avant-dernière étape est de créer notre script Python pour voir si la connexion avec l’API Microsoft fonctionne correctement. Sa mission est de simplement nous lister l’ensemble des sites sharepoint de notre tenant Microsoft. Pour cela n’oubliez pas d’ajouter la permission Sites.Read.All pour votre application ai l’autorisation de faire les bons appels API. Voici le script de test :

import requests
import json
import os
from dotenv import load_dotenv
from msal import ConfidentialClientApplication

# --- CHARGEMENT DE LA CONFIGURATION ---
# Charge les variables d'environnement à partir du fichier .env
load_dotenv()

# Récupère les informations d'identification depuis les variables d'environnement
TENANT_ID = os.getenv("TENANT_ID")
CLIENT_ID = os.getenv("CLIENT_ID")
CLIENT_SECRET = os.getenv("CLIENT_SECRET")

# --- VÉRIFICATION DE LA CONFIGURATION ---
if not all([TENANT_ID, CLIENT_ID, CLIENT_SECRET]):
    print("Erreur de configuration : Assurez-vous d'avoir créé un fichier .env")
    print("et d'y avoir défini TENANT_ID, CLIENT_ID, et CLIENT_SECRET.")
    exit()

# --- AVERTISSEMENT DE SÉCURITÉ ---
# Le fichier .env ne doit jamais être partagé ou publié (ajoutez-le à votre .gitignore).
# Pour une sécurité maximale en production, utilisez un gestionnaire de secrets comme Azure Key Vault.

# Points de terminaison et périmètre (scope) de l'API
AUTHORITY = f"https://login.microsoftonline.com/{TENANT_ID}"
SCOPE = ["https://graph.microsoft.com/.default"]

# L'endpoint pour rechercher TOUS les sites SharePoint. Le `search=*` est la clé.
ENDPOINT = "https://graph.microsoft.com/v1.0/sites?search=*"

# 1. AUTHENTIFICATION
print("1. Tentative d'authentification...")
app = ConfidentialClientApplication(
    client_id=CLIENT_ID,
    authority=AUTHORITY,
    client_credential=CLIENT_SECRET
)
result = app.acquire_token_for_client(scopes=SCOPE)
if "access_token" not in result:
    print("Erreur : Échec de l'obtention du jeton d'accès.")
    print(f"Raison : {result.get('error')}")
    print(f"Description : {result.get('error_description')}")
    exit()
access_token = result['access_token']
headers = {'Authorization': f'Bearer {access_token}'}
print("✓ Authentification réussie !")

# 2. APPEL À L'API : Lister tous les sites en gérant la pagination
print("\n2. Récupération de la liste des sites SharePoint...")
all_sites = []
url = ENDPOINT

while url:
    response = requests.get(url, headers=headers)
    
    if response.status_code != 200:
        print(f"Erreur lors de l'appel à l'API : {response.status_code}")
        print("Réponse de l'API :")
        print(response.json())
        break

    data = response.json()
    sites_on_page = data.get('value', [])
    all_sites.extend(sites_on_page)
    
    # Vérifier s'il y a une page suivante (@odata.nextLink)
    url = data.get('@odata.nextLink')
    if url:
        print(f"   - Page récupérée ({len(sites_on_page)} sites), passage à la page suivante...")

# 3. AFFICHER LES RÉSULTATS
print("\n3. Liste des sites SharePoint trouvés :\n")

if all_sites:
    # Trier les sites par ordre alphabétique pour une meilleure lisibilité
    all_sites.sort(key=lambda x: x.get('displayName', ''))
    
    for site in all_sites:
        display_name = site.get('displayName', 'N/A')
        web_url = site.get('webUrl', 'N/A')
        print(f"- Nom du site : {display_name}")
        print(f"  URL         : {web_url}\n")
else:
    print("Aucun site trouvé ou une erreur s'est produite.")

print(f"--- Script terminé. Total de {len(all_sites)} sites listés. ---")

La dernière étape est d’ajouter les informations de connexion dans notre fichier .env que l’on gère avec dot-env. Vous trouvez toutes les informations sur dot-env et le stockage des tokens secrets sur cet article.

À côté de votre script Python, créez un nouveau fichier nommé .env (attention, il n’y a pas de nom avant le point). Ce fichier contiendra vos informations d’identification. Remplissez ce fichier avec vos propres informations, comme ceci :

 # Fichier de configuration pour le script SharePoint
TENANT_ID="VOTRE_TENANT_ID"
CLIENT_ID="VOTRE_CLIENT_ID"
CLIENT_SECRET="VOTRE_CLIENT_SECRET"

Le TENANT_ID correspond à l’id de l’annuaire (locataire) que l’on voit sur la capture d’écran de votre application. 

Le CLIENT_ID est l’id d’application (client) que vous avez sur l’application que vous venez de créer avec ses autorisations. 

Le CLIENT_SECRET est la valeur de votre secret. 

Dans mon Windows, je lance WSL pour profiter de l’environnement Linux pour exécuter le script, car je trouve ça plus pratique. Le mieux pour étant un environnement purement Linux, mais ce n’est pas possible dans mon contexte. Voilà, vous pouvez maintenant lancer votre script Python qui devrait vous afficher la liste de vos sites Sharepoint hébergés sur Microsoft 365.

Lorsque mon script arrive au bout de son exécution, j’ai bien l’ensemble de mes sites sharepoint de listés.

 --- Script terminé. Total de 366 sites listés. ---

Pour la suite, ce sera l’objet d’autres tutoriels, mais le champ des possibles s’ouvre pour vous. Il est maintenant possible de faire pleins d’autres actions sur notre environnement M365 à l’aide de l’API Microsoft Graph. 

Laisser un commentaire