Comment ajouter ou supprimer des autorisations déléguées consenties avec PowerShell

La gestion des autorisations déléguées des applications dans les environnements Microsoft est une tâche essentielle pour les administrateurs. Ce guide fournit un script Microsoft Graph PowerShell pour vous aider à ajouter ou supprimer des autorisations déléguées avec plus de granularité et de contrôle.


Pourquoi modifier les autorisations déléguées ?

Les autorisations déléguées permettent à une application d’agir au nom d’un utilisateur connecté. Il existe toutefois des situations où vous devrez peut-être ajuster ces autorisations :

  • Pour supprimer les autorisations inutiles ou excessives à des fins de sécurité.
  • Pour ajouter de nouvelles autorisations requises pour le fonctionnement de l’application.
  • Pour résoudre les problèmes d’accès à l’API.

Remarque : Le script fourni ici offre un contrôle précis des autorisations et convient parfaitement aux scénarios avancés.


Script PowerShell : ajouter ou supprimer des autorisations déléguées

Voici le script PowerShell complet pour gérer les autorisations déléguées :

Section de configuration

# CONFIGURATION

# Application ID of app
$appId= "YOUR_APP_ID"

# Uncomment below line if you want to modify user consent
# $UserId = [email protected]

# Microsoft Graph App ID (DO NOT CHANGE)
# AAD Graph App Id: "00000002-0000-0000-c000-000000000000"
# MS Graph App Id: "00000003-0000-0000-c000-000000000000"
$resourceId= "00000003-0000-0000-c000-000000000000"

# Delegated Permissions you want on this service principal
$AddPermissions = @(
    "User.Read"
)

$RemovePermissions = @(
    "Mail.Send",
    "Group.ReadWrite.All"
)

Script principal

# Connect to Microsoft Graph PowerShell
Connect-MgGraph -Scopes "Directory.Read.All DelegatedPermissionGrant.ReadWrite.All"

$appPrincipal = Get-MgServicePrincipal -Filter "appId eq '$($appId)'"
$ResourceServicePrincipal = Get-MgServicePrincipal -Filter "appId eq '$($resourceId)'"
$UserPrincipal = Get-MgUser -UserId $UserId

# Find grant if one already exists
if($UserId) {
    $grants = Get-MgOauth2PermissionGrant -Filter "clientId eq '$($appPrincipal.id)' and resourceId eq '$($ResourceServicePrincipal.id)' and principalId eq '$($UserPrincipal.id)'"
} else {
    $grants = Get-MgOauth2PermissionGrant -Filter "clientId eq '$($appPrincipal.id)' and resourceId eq '$($ResourceServicePrincipal.id)'"
}

# Update existing grant
$RemovePermissions += $AddPermissions
foreach($grant in $grants) {
    # Remove permissions from grant
    foreach($permission in $RemovePermissions) {
        Write-Host "Removing: $($permission)"
        # Remove permission from grant
        $grant.scope = $grant.scope.Replace($permission, "")
    }

    # Add permissions to grant
    foreach($permission in $AddPermissions) {
        $grant.scope += $permission + " "
    }

    # Update existing Grant
    Update-MgOauth2PermissionGrant -Oauth2PermissionGrantId $grant.id -Scope $grant.scope.Trim()
}

# Create grant if none exists
if(!$grants) {
    $ScopeString = $AddPermissions -join " "
    if($UserId) {
        New-MgOauth2PermissionGrant -ClientId $appPrincipal.id -ResourceId $ResourceServicePrincipal.id -Scope $ScopeString -ConsentType Principal -PrincipalId $UserPrincipal.id
    } else {
        New-MgOauth2PermissionGrant -ClientId $appPrincipal.id -ResourceId $ResourceServicePrincipal.id -Scope $ScopeString -ConsentType AllPrincipals
    }
}

Notes importantes pour les administrateurs

  1. Prérequis :
    • Installez la dernière version du Microsoft Graph PowerShell SDK.
    • Assurez-vous de disposer des autorisations requises pour gérer les autorisations déléguées (Directory.Read.All et DelegatedPermissionGrant.ReadWrite.All).
  2. Personnalisation du script :
    • Remplacez YOUR_APP_ID par l’ID d’application de l’application que vous souhaitez gérer.
    • Modifiez les tableaux $AddPermissions et $RemovePermissions afin d’y inclure les autorisations que vous souhaitez ajouter ou supprimer.
  3. Autorisations utilisateur et autorisations d’application :
    • Si vous modifiez les autorisations d’un utilisateur précis, décommentez et définissez $UserId sur l’adresse e-mail de l’utilisateur.
    • Si vous gérez les autorisations de tous les utilisateurs, laissez $UserId en commentaire.
  4. Test du script :
    • Avant d’exécuter le script en production, testez-le dans un environnement hors production pour vous assurer qu’il fonctionne comme prévu.

Exemples de cas d’usage

  • Ajout d’autorisations : Ajoutez User.Read pour permettre à l’application d’accéder aux informations de base du profil utilisateur.
  • Suppression d’autorisations : Supprimez Mail.Send pour empêcher l’application d’envoyer des e-mails au nom des utilisateurs.
  • Contrôle granulaire : Combinez l’ajout et la suppression d’autorisations dans un seul script pour une gestion efficace.

Laisser un commentaire