Exemple d’API protégée par l’infrastructure de consentement d’identité Microsoft

Cet article peut vous aider, en tant que développeur, à concevoir votre stratégie d’autorisations d’application pour fournir des privilèges minimum. Avant de continuer, consultez l’article Protection des API pour découvrir les meilleures pratiques en matière d’inscription, d’autorisations et d’accès.

Examinons comment une API protégée par le Plateforme d’identités Microsoft utilise l’infrastructure de consentement de l’identité Microsoft. Nous utilisons l’API Microsoft Graph comme exemple, car elle utilise au mieux l’infrastructure de consentement de la plateforme d’identités Microsoft.

Convention d’affectation de noms pour les noms d’autorisations

L’équipe Microsoft Graph a créé une convention d’affectation de noms pour permettre aux noms d’autorisations de connecter plus facilement l’autorisation à l’accès aux ressources que l’autorisation active. Les noms d’autorisations Microsoft Graph adhèrent à un modèle resource.operation.constraint simple. Les deux opérations principales sont Lecture et ReadWrite (qui inclut la mise à jour et la suppression).

L’élément de contrainte affecte le degré d’accès que votre application possède dans l’annuaire. Microsoft Graph prend en charge ces contraintes :

  • Toutes accordent l’autorisation à votre application d’effectuer les opérations sur toutes les ressources du type spécifié dans un répertoire.
  • Partagé accorde l’autorisation à votre application d’effectuer les opérations sur les ressources partagées par d’autres utilisateurs avec l’utilisateur connecté.
  • AppFolder accorde l’autorisation à votre application de lire et d’écrire des fichiers dans un dossier dédié dans OneDrive. Cette contrainte n'est exposée que sur l'objet autorisations de Fichiers et n'est valable que pour les comptes Microsoft.
  • Si vous spécifiez Aucune contrainte, votre application ne peut effectuer que les opérations sur les ressources que l’utilisateur connecté possède.

Accès et opérations sur des ressources spécifiques

Examinons certaines autorisations ou étendues pour l’objet utilisateur dans Microsoft Graph pour voir comment les concepteurs d’API Microsoft ont activé un accès et des opérations spécifiques sur des ressources spécifiques :

Autorisation Chaîne d'affichage Description
User.Read Connectez-vous et lisez le profil utilisateur Autorise les utilisateurs à se connecter à l’application et autorise l’application à lire le profil des utilisateurs connectés. Autorise également l’application à lire les informations de base sur la société des utilisateurs connectés.
User.ReadWrite Accès en lecture et écriture au profil utilisateur Permet à l'application de lire le profil complet de l'utilisateur connecté. Elle permet également à l’application de mettre à jour les informations de profil de l’utilisateur connecté en son nom.

User.Read et User.ReadWrite existent (par opposition à une autorisation unique comme User.Access qui n’existe pas) afin que les applications puissent suivre le principe de Confiance Zéro de privilège minimum. Si le développeur n’a pas de conditions requises et de code pour mettre à jour le profil de l’utilisateur, l’application ne demande pas de User.ReadWrite. Par conséquent, un attaquant ne peut pas compromettre l’application et l’utiliser pour modifier les données.

Notez que User.Read cela ne permet pas simplement à l’application d’accéder à l’objet utilisateur. Chaque autorisation représente une plage d’opérations spécifique. Il est important que les développeurs et les administrateurs lisent la description de l’autorisation pour voir exactement ce qu’une autorisation spécifique active. User.Read, en plus d’activer la lecture du profil complet de l’utilisateur actuel, permet à l’application de voir les informations de base de l’objet Organizations dans Microsoft Graph.

Examinons une autre autorisation :

Autorisation Chaîne d'affichage Description
User.ReadBasic.All Accéder en lecture aux profils de base de tous les utilisateurs Permet à l’application de lire un ensemble de propriétés de profil de base d’autres utilisateurs de votre organisation pour le compte de l’utilisateur connecté. Inclut le nom d’affichage, le prénom, le nom de famille, l’adresse e-mail, les extensions ouvertes et la photo. Permet à l'application de lire le profil complet de l'utilisateur connecté.

Plage d’opérations qui User.ReadBasic.All commence par tout ce qui User.Read se passe. En outre, vous pouvez accéder au nom d’affichage, au prénom, au nom de famille, à l’adresse e-mail et à la photo, et ouvrir les extensions pour d’autres utilisateurs de l’organisation. La plage d’opérations spécifique permet aux applications d’avoir une interface utilisateur de sélecteur de personnes agréable et est un exemple de concepteurs d’API utilisant une autorisation pour activer une plage d’opérations spécifique.

Examinons quelques autorisations supplémentaires sur l’objet utilisateur Microsoft Graph :

Autorisation Chaîne d'affichage Description
User.Read.All Lire les profils complets de tous les utilisateurs Permet à l’application de lire l’ensemble complet de propriétés de profil, de rapports et de gestionnaires d’autres utilisateurs de votre organisation, au nom de l’utilisateur connecté.
User.ReadWrite.All Lire et écrire les profils complets de tous les utilisateurs Permet à l’application de lire et d’écrire l’ensemble complet de propriétés de profil, de rapports et de gestionnaires d’autres utilisateurs de votre organisation, au nom de l’utilisateur connecté. Permet également à l’application de créer et de supprimer des utilisateurs et de réinitialiser les mots de passe utilisateur pour le compte de l’utilisateur connecté.

Comme avec User.Read et User.ReadWrite, User.Read.All et User.ReadWrite.All sont des autorisations distinctes qui permettent à une application de suivre le principe de privilège minimum Confiance Zéro.

User.Read.All est intéressant, car chaque utilisateur de l’organisation a cette fonctionnalité (par exemple, ouvrir Outlook, monter et descendre dans une chaîne de création de rapports). Vous pouvez, en tant qu’individu, voir le profil utilisateur complet de tous les autres utilisateurs de votre organisation. Toutefois, les concepteurs d’API Microsoft Graph ont décidé que seuls les administrateurs doivent autoriser une application à effectuer la même opération, car User.Read.All inclut la hiérarchie organisationnelle du client. Si un mauvais acteur a accédé à ces informations, il peut monter une attaque de hameçonnage ciblée où l’email de hameçonnage provient du responsable d’une personne ou du responsable de son responsable.

User.ReadWrite.All est une gamme puissante d’opérations. Une application disposant de cette autorisation peut mettre à jour ou même supprimer chaque utilisateur du client. En tant que permission déléguée, lorsqu’un utilisateur est devant l’application, l’application ne peut faire que ce que l’utilisateur actuel peut faire. Les utilisateurs réguliers ne peuvent pas mettre à jour ou supprimer d’autres utilisateurs, quelles que soient les autorisations de l’application. Toutefois, lorsqu’un administrateur client utilise l’application, il peut effectuer ces opérations. Lorsque vous décidez d’accorder ou de refuser cette autorisation, vous devez évaluer votre application avec un utilisateur administrateur client à l’esprit.

Étant donné la puissance de User.Read.All et User.ReadWrite.All, les concepteurs d’API Microsoft Graph ont désigné ces autorisations comme nécessitant le consentement administrateur. Ajoutons une Administration ? Colonne de notre table d’autorisations pour indiquer quand l’autorisation nécessite le consentement administrateur :

Autorisation Chaîne d'affichage Description Administrateur ?
User.Read Connectez-vous et lisez le profil utilisateur Autorise les utilisateurs à se connecter à l’application et autorise l’application à lire le profil des utilisateurs connectés. Autorise également l’application à lire les informations de base sur la société des utilisateurs connectés. Aucun
User.ReadWrite Accès en lecture et écriture au profil utilisateur Permet à l'application de lire le profil complet de l'utilisateur connecté. Elle permet également à l’application de mettre à jour les informations de profil de l’utilisateur connecté en son nom. Aucun
User.ReadBasic.All Accéder en lecture aux profils de base de tous les utilisateurs Permet à l’application de lire un ensemble de propriétés de profil de base d’autres utilisateurs de votre organisation pour le compte de l’utilisateur connecté. Inclut le nom d’affichage, le prénom, le nom de famille, l’adresse e-mail, les extensions ouvertes et la photo. Permet à l'application de lire le profil complet de l'utilisateur connecté. Aucun
User.Read.All Lire les profils complets de tous les utilisateurs Permet à l’application de lire l’ensemble complet de propriétés de profil, de rapports et de gestionnaires d’autres utilisateurs de votre organisation, au nom de l’utilisateur connecté. Oui
User.ReadWrite.All Lire et écrire les profils complets de tous les utilisateurs Permet à l’application de lire et d’écrire l’ensemble complet de propriétés de profil, de rapports et de gestionnaires d’autres utilisateurs de votre organisation, au nom de l’utilisateur connecté. Permet également à l’application de créer et de supprimer des utilisateurs et de réinitialiser les mots de passe utilisateur pour le compte de l’utilisateur connecté. Oui

Comme illustré dans l’article Demander des autorisations qui nécessitent un consentement administratif, les administrateurs de locataires peuvent remplacer les exigences et désigner toutes les autorisations d’application dans leur locataire comme nécessitant le consentement de l’administrateur. Vous êtes sage de concevoir votre application pour gérer correctement quand vous ne recevez pas de jeton de votre demande. L’absence de consentement est l’une des nombreuses raisons pour lesquelles votre application risque de ne pas recevoir de jeton.

Étapes suivantes