L’API Microsoft Graph est un service qui vous permet de lire, modifier et gérer presque tous les aspects d’Azure AD et d’Office 365 sous un seul point de terminaison API REST. Dans cet article, apprenez comment transformer votre API en PowerShell Graph API.
Prérequis
Si vous souhaitez suivre avec moi dans cet article, assurez-vous d’abord de répondre aux critères suivants :
- Exécution de Windows PowerShell 5.1 (C’est la version avec laquelle j’ai testé. D’autres versions peuvent fonctionner mais ne sont pas garanties)
- Un locataire Azure
- Authentifié à Azure avec un compte disposant d’autorisations d’administrateur global ou d’autorisations d’inscription d’application sur l’abonnement et un administrateur global pour accepter vos demandes d’inscription d’application.
Création d’une identité d’application pour Microsoft Graph API
Pour accéder à l’API Microsoft Graph, vous avez d’abord besoin d’une identité pour obtenir un jeton OAuth. Cela se fait principalement avec une identité d’application que vous pouvez créer dans le portail Azure. Vous pouvez créer une identité d’application via le portail Azure. Pour ce faire :
- Rendez-vous sur le portail Azure et accédez à Azure Active Directory.
- Cliquez sur Inscriptions d’applications sous Gérer dans le menu de gauche et cliquez sur le bouton Nouvelle inscription.

- Entrez un nom pour votre application et cliquez sur Enregistrer.
- Copiez l’identifiant de l’application (GUID) pour une utilisation ultérieure.

Création de secrets pour l’API Microsoft Graph.
Vous pouvez vous authentifier auprès de l’API Graphique avec deux méthodes principales : AppId/Secret et l’authentification basée sur un certificat. Vous devrez vous authentifier lors de la connexion à l’API graphique avec PowerShell.
Explorons comment s’authentifier avec les deux méthodes.
AppId/Secret
Un ID d’application/secret est comme un nom d’utilisateur/mot de passe classique. L’ID de l’application est constitué d’un GUID au lieu d’un nom d’utilisateur et le mot de passe est simplement une chaîne aléatoire.
Pour créer un secret – cliquez sur Certificats et secrets dans le menu de gauche et appuyez sur Nouveau secret client.

Entrez une description pour le secret et sélectionnez quand vous voulez qu’il expire. Maintenant, il suffit de demander la permission pour accéder aux données que vous souhaitez.
Certificat
Il est possible de créer un certificat auto-signé et d’envoyer sa clé publique à Azure. C’est la méthode préférée et la plus sécurisée d’authentification.
Vous devrez d’abord générer un certificat auto-signé. Heureusement, cela se fait facilement avec PowerShell.
Maintenant, téléchargez le certificat auto-signé que vous avez exporté vers $CerOutputPath
vers votre application Azure en cliquant sur Certificats & secrets dans le menu de gauche et en appuyant sur Télécharger le certificat.

Ajout de permissions à l’application
Accorder les autorisations appropriées à l’application est important, non seulement pour la fonctionnalité de votre application, mais aussi pour la sécurité. La documentation sur cela et (presque) tout le reste dans l’API Microsoft Graph peut être trouvée dans la documentation.
Une fois que j’aurai configuré cela, je vais rassembler tous les événements de sécurité de mon locataire. Pour être autorisé à le faire, j’ai besoin de l’autorisation minimale SecurityEvents.Read.All. Avec cela, je peux rassembler et agir sur les événements de déplacements impossibles, les utilisateurs se connectant via VPN/TOR, etc.
Pour ajouter SecurityEvents.Read.All à votre application, cliquez sur Autorisations API puis sur Ajouter une autorisation. Cela vous présentera non seulement l’API Microsoft Graph, mais aussi de nombreuses autres applications dans Azure. La plupart de ces applications sont faciles à connecter une fois que vous savez comment vous connecter à l’API Microsoft Graph.
Cliquez sur Microsoft Graph > Autorisations d’application > Événements de sécurité et cochez SecurityEvents.Read.All. Ensuite, appuyez sur le bouton Ajouter une autorisation.
Avez-vous remarqué que la colonne Consentement administrateur requis était définie sur Oui pour cette autorisation ? Cela signifie qu’un administrateur du locataire doit approuver avant que l’autorisation ne soit ajoutée à l’application.

Si vous êtes un administrateur global, appuyez sur le bouton Accorder le consentement administrateur pour ou demandez à un administrateur global de l’approuver. Demander la permission à l’utilisateur au lieu d’un administrateur définissant simplement la permission de lecture/écriture est une grande partie de l’authentification OAuth. Mais cela nous permet de contourner cela pour la plupart des autorisations dans Microsoft Graph.
Vous avez probablement déjà vu cela sur Facebook ou Google : « Autorisez-vous l’application X à accéder à votre profil ? »

Maintenant, vous êtes prêt – connectez-vous et obtenez des données !
Obtenir un jeton d’accès (ID d’application et secret)
Pour cela, nous devrons envoyer une requête pour obtenir un jeton d’accès à partir d’un point de terminaison OAuth de Microsoft Graph. Et dans le corps de cette requête, nous devons fournir :
client_id
– Votre ID d’application – encodé en URLclient_secret
– Votre secret d’application – encodé en URLscope
– Une URL encodée spécifiant ce à quoi vous souhaitez accédergrant_type
– La méthode d’authentification que vous utilisez
L’URL du point de terminaison est https://login.microsoftonline.com/<tenantname>/oauth2/v2.0/token. Vous pouvez demander un jeton d’accès avec PowerShell et l’API Graph en utilisant le code ci-dessous.
Obtenir un jeton d’accès (Utilisation d’un certificat)
L’authentification à l’API Microsoft Graph avec un certificat est légèrement différente de la procédure normale avec l’ID d’application/secret. Pour obtenir un jeton d’accès à l’aide d’un certificat, vous devez :
- Créez un en-tête de jeton Web Java (JWT).
- Créez une charge utile JWT.
- Signez l’en-tête JWT ET la charge utile avec le certificat auto-signé précédemment créé. Cela créera un jeton d’accès auto-fabriqué utilisé pour demander un jeton d’accès Microsoft Graph.
- Créez un corps de requête contenant :
client_id=<ID de l'application>
client_assertion=<le JWT>
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
scope=<portée encodée en URL>
grant_type=client_credentials
- Effectuez une requête POST avec le corps vers le point de terminaison OAuth avec
Authorization=<JWT>
dans son en-tête.
Comment faire cela n’était pas évident dans la documentation de Microsoft, mais voici le script PowerShell pour y parvenir :
Compréhension de la sortie de jeton d’accès
Une fois que vous avez obtenu un jeton d’accès, que ce soit via l’ID/application secrète ou via un certificat, vous devriez voir un objet avec quatre propriétés.
token_type
– Le type de jeton qu’il s’agitexpires_in
– Temps en secondes pendant lequel le jeton d’accès est valideext_expires_in
– Commeexpires_in
mais pour la résilience en cas de panne de service de jetonsaccess_token
– Ce que nous sommes venus chercher
Ensuite, vous allez créer un en-tête en utilisant token_type
et access_token
et commencer à effectuer des requêtes avec PowerShell vers l’API Microsoft Graph.
Effectuer des requêtes vers l’API Graph Microsoft PowerShell
Commencez maintenant à effectuer des requêtes vers l’API.
En suivant notre exemple, vous aurez d’abord besoin de l’URL pour répertorier les alertes de sécurité. N’oubliez pas d’utiliser la documentation de l’API Microsoft Graph pour voir ce qui est nécessaire.
Dans ce cas, vous avez besoin d’un en-tête avec Authorization=Bearer <access_token>
et une requête GET vers le point de terminaison des alertes de l’API Graph. Voici comment faire cela avec PowerShell.
Maintenant, si vous avez des alertes de sécurité dans la variable $SecurityAlerts
, cela devrait ressembler à ceci :
Inspecter une alerte de sécurité unique au format JSON ressemblera à ceci :
Comprendre et gérer la pagination des résultats d’API
Le Microsoft Graph API a une limite par fonction sur le nombre d’éléments qu’il renverra. Cette limite est par fonction, mais disons qu’elle est de 1000 éléments. Cela signifie que vous ne pouvez obtenir qu’un maximum de 1000 éléments dans votre demande.
Lorsque cette limite est atteinte, la pagination est utilisée pour livrer le reste des éléments. Cela se fait en ajoutant la propriété @odata.nextLink
à la réponse de votre demande. @odata.nextLink
contient une URL que vous pouvez appeler pour obtenir la page suivante de votre demande.
Vous pouvez parcourir tous les éléments en vérifiant cette propriété et en utilisant une boucle :
Conclusion
Une fois que vous avez appris à vous authentifier auprès de l’API Graph, il est assez facile de collecter des données. C’est un service puissant qui est utilisé beaucoup moins qu’il ne le devrait.
Heureusement, il existe déjà de nombreux modules pour utiliser le Microsoft Graph API, mais pour répondre à vos propres besoins, vous devrez peut-être créer votre propre module. En utilisant les compétences que vous avez apprises dans cet article, vous devriez être bien parti.
Pour plus d’informations sur le contrôle de l’accès des invités dans Office 365, j’ai écrit un article approfondi sur mon blog que je vous encourage à consulter.