用户退订后如何从Azure AD移除多租户应用服务主体并管理同意权限
编程方式移除Azure AD租户中用户授予的应用注册同意的可行方案
方案1:通过Microsoft Graph API实现
要编程移除用户授予的应用同意,核心是操作Microsoft Graph中的权限授予记录,需先确保调用身份具备对应权限:
- 以用户身份操作时,需拥有
Directory.AccessAsUser.All权限;以应用身份操作时,需Application.ReadWrite.All权限。
针对两种不同的同意类型,API调用方式不同:
移除用户级委托权限同意:
- 获取该用户所有的OAuth2权限授予记录:
GET /users/{userId}/oauth2PermissionGrants - 从返回结果中筛选出对应目标应用的记录(通过
clientId匹配应用注册的客户端ID) - 调用删除接口:
DELETE /oauth2PermissionGrants/{grantId}
- 获取该用户所有的OAuth2权限授予记录:
移除应用角色权限同意(应用级同意):
- 获取该用户的所有应用角色分配记录:
GET /users/{userId}/appRoleAssignments - 筛选出目标服务主体对应的记录(通过
resourceId匹配服务主体ID) - 调用删除接口:
DELETE /users/{userId}/appRoleAssignments/{appRoleAssignmentId}
- 获取该用户的所有应用角色分配记录:
方案2:使用Microsoft Graph PowerShell脚本
如果习惯用脚本操作,可以借助Microsoft Graph PowerShell模块完成:
- 安装并导入模块:
Install-Module Microsoft.Graph -Force Import-Module Microsoft.Graph.Identity.SignIns - 连接到Graph并授权:
Connect-MgGraph -Scopes "Directory.AccessAsUser.All" - 删除用户的委托权限同意:
# 获取用户的权限授予记录 $userGrants = Get-MgUserOauth2PermissionGrant -UserId "user@contoso.com" # 筛选目标应用的记录 $targetGrant = $userGrants | Where-Object { $_.ClientId -eq "目标应用ClientID" } # 移除同意 if ($targetGrant) { Remove-MgUserOauth2PermissionGrant -UserId "user@contoso.com" -OAuth2PermissionGrantId $targetGrant.Id } - 若要删除应用角色权限同意,替换为以下命令:
$appRoleAssignments = Get-MgUserAppRoleAssignment -UserId "user@contoso.com" $targetAssignment = $appRoleAssignments | Where-Object { $_.ResourceId -eq "目标服务主体ID" } if ($targetAssignment) { Remove-MgUserAppRoleAssignment -UserId "user@contoso.com" -AppRoleAssignmentId $targetAssignment.Id }
租户手动移除服务主体的说明
告知租户通过Azure门户手动移除服务主体是可行方案,但该操作必须由具备特定权限的用户执行,比如全局管理员、云应用管理员或应用程序管理员角色。操作路径大致为:Azure门户 -> Azure Active Directory -> 企业应用 -> 搜索并找到目标服务主体 -> 删除。普通租户用户无此权限,仅适合租户管理员操作。
内容的提问来源于stack exchange,提问作者P V Ajay Thota
相关产品推荐
相关产品推荐

