在 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,以防止應用程式代表使用者傳送電子郵件。 - 精細控制: 將新增和移除權限合併到同一個指令碼中,以便有效率地管理。