Como adicionar ou remover permissões delegadas consentidas usando o PowerShell

Gerenciar permissões delegadas de aplicativos em ambientes Microsoft é uma tarefa crítica para administradores. Este guia fornece um script do Microsoft Graph PowerShell para ajudar você a adicionar ou remover permissões delegadas com mais granularidade e controle.


Por que modificar permissões delegadas?

As permissões delegadas permitem que um aplicativo atue em nome de um usuário conectado. No entanto, há cenários em que você pode precisar ajustar essas permissões:

  • Para remover permissões desnecessárias ou excessivas por motivos de segurança.
  • Para adicionar novas permissões necessárias para a funcionalidade do aplicativo.
  • Para solucionar problemas de acesso à API.

Observação: O script fornecido aqui oferece controle refinado sobre as permissões e é ideal para cenários avançados.


Script do PowerShell: adicionar ou remover permissões delegadas

Aqui está o script completo do PowerShell para gerenciar permissões delegadas:

Seção de configuração

# 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
    }
}

Observações importantes para administradores

  1. Pré-requisitos:
    • Instale a versão mais recente do Microsoft Graph PowerShell SDK.
    • Verifique se você tem as permissões necessárias para gerenciar permissões delegadas (Directory.Read.All e DelegatedPermissionGrant.ReadWrite.All).
  2. Personalizar o script:
    • Substitua YOUR_APP_ID pelo ID de aplicativo do aplicativo que você deseja gerenciar.
    • Modifique as matrizes $AddPermissions e $RemovePermissions para incluir as permissões que você deseja adicionar ou remover.
  3. Permissões de usuário versus permissões de aplicativo:
    • Se estiver modificando as permissões de um usuário específico, remova o comentário e defina $UserId com o endereço de e-mail do usuário.
    • Se estiver gerenciando as permissões de todos os usuários, deixe $UserId comentado.
  4. Testar o script:
    • Antes de executar o script em produção, teste-o em um ambiente de não produção para garantir que ele funcione como esperado.

Exemplos de casos de uso

  • Adicionar permissões: Adicione User.Read para permitir que o aplicativo acesse as informações básicas do perfil do usuário.
  • Remover permissões: Remova Mail.Send para impedir que o aplicativo envie e-mails em nome dos usuários.
  • Controle granular: Combine a adição e a remoção de permissões em um único script para um gerenciamento eficiente.

Deixe um comentário