在 Microsoft 环境中管理应用程序的委派权限是管理员的一项关键任务。本指南提供了一个 Microsoft Graph PowerShell 脚本 ,可帮助你以更精细的粒度和更强的控制力添加或删除委派权限。
为什么要修改委派权限?
委派权限允许应用程序代表已登录用户行事。不过,在某些情况下,你可能需要调整这些权限:
- 出于安全考虑,删除不必要或过多的权限。
- 添加应用程序功能所需的新权限。
- 排查 API 访问问题。
注意: 这里提供的脚本可以精细地控制权限,非常适合高级场景。
PowerShell 脚本:添加或删除委派权限
下面是管理委派权限的完整 PowerShell 脚本:
配置部分
# 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"
)
主脚本
# 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
}
}
管理员注意事项
- 前提条件:
- 安装最新版本的 Microsoft Graph PowerShell SDK.
- 确保你拥有管理委派权限所需的权限(
Directory.Read.All和DelegatedPermissionGrant.ReadWrite.All).
- 自定义脚本:
- 将
YOUR_APP_ID替换为要管理的应用的应用程序 ID。 - 修改
$AddPermissions和$RemovePermissions数组,以包含你要添加或删除的权限。
- 将
- 用户权限与应用程序权限:
- 如果要修改特定用户的权限,请取消注释并将
$UserId设置为该用户的电子邮件地址。 - 如果要管理所有用户的权限,请让
$UserId保持注释状态。
- 如果要修改特定用户的权限,请取消注释并将
- 测试脚本:
- 在生产环境中运行脚本之前,请先在非生产环境中测试,以确保其按预期工作。
示例用例
- 添加权限: 添加
User.Read,以允许应用访问基本用户个人资料信息。 - 删除权限: 删除
Mail.Send,以防止应用代表用户发送电子邮件。 - 精细控制: 将添加和删除权限合并到一个脚本中,以便高效管理。