Semion Vasilevitzky et Jonathan Elkabas

Note de la rédaction : Bienvenue dans le quatrième et dernier tutoriel pratique de la série « Comprendre et prévenir les attaques ciblant l’identité des agents Entra ID : guide complet ». Ce guide technique en plusieurs parties vous aide à comprendre l’approche de Microsoft en matière d’identités d’agents et à découvrir comment vous pouvez les protéger contre les acteurs malveillants. Pour revoir les chapitres précédents et les leçons pratiques, cliquez ici.

Au chapitre 5 de notre guide, vous avez découvert et vous vous êtes exercé à utiliser le registre des agents de Microsoft, et vous avez suivi pas à pas les étapes de trois flux d'authentification d'identité d'agent dans Entra ID.

Dans ce « Practice Checkpoint », nous allons vérifier les trois flux dont nous avons parlé en les suivant chacun de bout en bout via Microsoft Graph et en affichant les revendications réelles des jetons à chaque étape afin de relier tous les éléments entre eux.

Par souci de cohérence et de clarté, nous continuerons à utiliser l'identité d'agent que nous avons créée lors des étapes précédentes et nous examinerons les jetons générés à l'issue de chaque flux.

Voici un bref récapitulatif des informations dont vous avez besoin :

  • ID du plan = 3534ec06-21ea-4080-abd4-95116e260203
  • ID du plan SP = 17a48807-f813-421b-85b9-8c7e794bc4b9
  • Identifiant de l'agent: b85d92be-fa90-486b-94ed-b5ad91d35ceb
  • Identifiant de l'agent utilisateur = 2954440b-1617-46b1-9156-dad15f1f824f
  • Autorisations déléguées héritables = Group.Read.All
  • Autorisations directes réservées à l'application au niveau de l'identité de l'agent = User.Read.All

Débit autonome

Dans ce flux, c'est l'identité de l'agent elle-même qui doit accéder à une ressource.

Pour commencer, nous devons obtenir le jeton T1. Cette procédure est similaire à celle permettant d'obtenir un jeton d'accès pour un modèle d'identité d'agent, mais présente deux différences majeures :

  • champ d'application = api://AzureADTokenExchange/.default
  • inclure fmi_path = <agent-identity-id>
Figure 1. Obtention du jeton T1

Nous pouvons décoder le jeton T1, dans lequel :

  • Les cartes « oid » correspondent à l'identifiant SP du schéma.
  • « azp » correspond à l'ID du modèle d'identité de l'agent.
  • aud appartient à l'application « AAD Token Exchange Endpoint », qui est api://AzureADTokenExchange.
Figure 2 : Décodage du jeton T1

À l'aide du jeton T1, nous pouvons désormais obtenir le jeton d'accès d'identité de l'agent.

Figure 3 : Obtention du jeton d'accès d'identité de l'agent

En examinant le jeton Graph, on constate que :

  • La revendication en question concerne Microsoft Graph.
  • L'appid, tout comme l'entité oid, correspond à l'identifiant de l'agent.
  • Les rôles la réclamation porte notamment sur User.Read.All autorisation, que nous avons attribuée précédemment et directement associée à l'identité de l'agent en tant qu'autorisation réservée à l'application.

À ce stade, l'identité de l'agent peut appeler Graph dans le tenant conformément à ses autorisations réservées à l'application.

Figure 4 : Décodage du jeton d'accès d'identité de l'agent Graph

Flux « au nom de »

Dans ce flux, l'identité de l'agent effectue des actions déléguées en tant qu'utilisateur et illustre les portées de délégation transmissibles.

Pour commencer, nous devons obtenir un jeton client (TC). Pour cela, nous devons d'abord définir les champs d'application des autorisations OAuth2 sur le blueprint, puis donner mon consentement en tant qu'utilisateur.

Figure 5 : Définition des champs d'application des autorisations OAuth2 dans le blueprint

Dans un deuxième temps, nous allons créer une application SAP via l'interface utilisateur.

Figure 6 : Enregistrement de notre application SAP

Nous allons ajouter les autorisations Blueprint que nous venons de créer à notre application DemoSAP :

Figure 7 : Ajout d'autorisations de blueprint à notre application SAP de démonstration

Pour cette démonstration, nous autoriserons également le flux client public :

Figure 8 : Activation des flux client publics dans notre démonstration d'authentification

Nous pouvons désormais obtenir un jeton TC. Le ClientID correspond à l'identifiant de l'application que nous venons de créer :

Figure 9. Obtention d'un jeton TC à l'aide de l'identifiant d'application nouvellement créé

Ensuite, nous devons passer en revue les demandes de consentement habituelles prévues.

Figure 10. Octroi des autorisations pour notre application de démonstration

Cela renverra le jeton TC qui m'appartient en tant qu'utilisateur. On constate que la revendication « aud » correspond à l'identifiant du Blueprint :

Figure 11. Le décodage du jeton TC montre que l'affirmation « aud » correspond à l'identifiant du modèle d'identité de l'agent.

Nous pouvons désormais récupérer le jeton T1 en utilisant la même méthode que celle que nous avons déjà employée.

Figure 12. Récupération du jeton T1

Avant de poursuivre, nous devons donner notre consentement afin que l'identité de l'agent puisse agir au nom de notre utilisateur, à l'aide d'un appel OAuth2PermissionGrants standard avec la portée que nous avons définie comme autorisations héritables.

Si vous avez déjà donné votre accord pour « AllPrincipals » dans la section « Configuration des autorisations héritables », vous pouvez ignorer cette étape.

Figure 13. Autoriser l'identité de l'agent à agir au nom de l'utilisateur

Enfin, en utilisant à la fois les jetons TC et T1, nous pouvons obtenir le jeton d'accès (TR).

Figure 14. Obtention du jeton d'accès TR

Le jeton d'accès décodé indique :

  • Droit SCP associé aux autorisations « Group.Read.All » héritables que nous avons ajoutées précédemment au niveau du modèle.
  • le nom d'affichage de l'application et la revendication « appid », qui identifient l'agent agissant pour le compte de l'utilisateur.
  • Les revendications « idtyp », « name » et « oid » appartiennent toutes à l'utilisateur (car il s'agit d'un jeton délégué).
Figure 15. Décodage du jeton d'accès TR

Parcours utilisateur de l'agent

Ce flux s'adresse à un utilisateur agent qui doit effectuer des actions en fonction du contexte de l'utilisateur.

Comme pour le flux autonome « agent-identity », nous devons obtenir un jeton T1.

Figure 16. Obtention du jeton T1 pour le processus d'authentification de l'utilisateur de notre agent

Ensuite, nous devrions donner notre consentement pour permettre à l'identité de l'agent d'agir au nom de l'utilisateur de l'agent, comme nous l'avons fait dans le flux OBO.

Cette fois-ci, nous allons spécifier l'ID utilisateur de l'agent comme ID du principal. Si vous avez déjà donné votre accord pour « AllPrincipals » dans la section « Configuration des autorisations héritables », vous pouvez ignorer cette étape.

Figure 17. Autorisation de l'identité de l'agent à agir au nom de l'utilisateur de l'agent

À présent, à partir du jeton T1, nous pouvons obtenir le jeton T2.

Figure 18. Obtention du jeton T2 dans le cadre du processus d'authentification de notre agent utilisateur

Le jeton T2 décodé révèle les revendications « azp », « oid » et « sub », toutes définies sur l'identifiant de l'agent.

Figure 19. Révélation de l'identifiant (ID) de l'agent dans les revendications de nos jetons T2 décodés

En utilisant à la fois les jetons T1 et T2, nous pouvons obtenir le jeton d'accès TR.

Figure 20. Obtention du jeton d'accès TR pour le flux d'authentification de notre agent utilisateur

Comme on peut le constater, ce jeton d'accès a été émis pour Microsoft Graph. Il indique :

  • La revendication « idtyp » correspond à un utilisateur
  • La réclamation « oid » correspond à l'identifiant utilisateur de l'agent
  • La variable « appid » est définie sur l'identifiant de l'agent, qui est le parent de l'utilisateur de l'agent.
  • scp contient le Group.Read.All, les lunettes que nous avons ajoutées tout à l'heure.
Figure 21. Décodage du jeton d'accès généré lors du processus d'authentification de l'utilisateur de l'agent pour Microsoft Graph

Vous disposez désormais d'une identité d'agent opérationnelle. Comment la protéger ?

La création de votre identité d'agent au cours de ces sessions pratiques devrait vous avoir permis de comprendre concrètement comment les agents travailleront dans votre instance Entra ID.

Lisez maintenant le dernier chapitre de notre guide pour avoir un aperçu des problèmes qui peuvent survenir — et découvrir comment protéger ces nouvelles identités.

Découvrez comment éviter une catastrophe au chapitre 6.


Découvrez le guide