Gestionar los permisos delegados de las aplicaciones en entornos de Microsoft es una tarea fundamental para los administradores. Esta guía ofrece un script de Microsoft Graph PowerShell para ayudarte a agregar o quitar permisos delegados con mayor granularidad y control.
¿Por qué modificar los permisos delegados?
Los permisos delegados permiten que una aplicación actúe en nombre de un usuario que ha iniciado sesión. Sin embargo, hay situaciones en las que puede que necesites ajustar estos permisos:
- Para quitar permisos innecesarios o excesivos por motivos de seguridad.
- Para agregar nuevos permisos necesarios para el funcionamiento de la aplicación.
- Para solucionar problemas de acceso a la API.
Nota: El script que se ofrece aquí permite un control preciso de los permisos y es ideal para escenarios avanzados.
Script de PowerShell: agregar o quitar permisos delegados
Aquí tienes el script completo de PowerShell para gestionar permisos delegados:
Sección de configuración
# 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
}
}
Notas clave para administradores
- Requisitos previos:
- Instala la versión más reciente del Microsoft Graph PowerShell SDK.
- Asegúrate de tener los permisos necesarios para gestionar permisos delegados (
Directory.Read.AllyDelegatedPermissionGrant.ReadWrite.All).
- Personalizar el script:
- Reemplaza
YOUR_APP_IDpor el ID de aplicación de la app que quieres gestionar. - Modifica las matrices
$AddPermissionsy$RemovePermissionspara incluir los permisos que deseas agregar o quitar.
- Reemplaza
- Permisos de usuario frente a permisos de aplicación:
- Si modificas los permisos de un usuario concreto, descomenta y establece
$UserIden la dirección de correo electrónico del usuario. - Si gestionas los permisos de todos los usuarios, deja
$UserIdcomentado.
- Si modificas los permisos de un usuario concreto, descomenta y establece
- Probar el script:
- Antes de ejecutar el script en producción, pruébalo en un entorno que no sea de producción para asegurarte de que funciona como se espera.
Casos de uso de ejemplo
- Agregar permisos: Agrega
User.Readpara permitir que la app acceda a la información básica del perfil de usuario. - Quitar permisos: Quita
Mail.Sendpara impedir que la app envíe correos en nombre de los usuarios. - Control granular: Combina la adición y la eliminación de permisos en un solo script para una gestión eficiente.