如何为多租户应用的次级租户中的企业应用(服务主体)添加API权限?
解决思路与操作方法
直接在Azure门户操作(无需管理员审批,前提是权限允许)
作为Tenant B里该服务主体的所有者,不用调用Graph API,直接在Azure门户就能加权限:
- 登录Azure门户,切换到Tenant B租户
- 找到「企业应用」,搜出你的多租户应用对应的服务主体并打开
- 进入「权限」页面,点「添加权限」
- 切换到「我的组织使用的API」标签,搜那个只在Tenant B注册的API应用
- 选好需要的应用权限(注意是应用角色类型的权限),点「添加权限」
- 如果这个权限不需要管理员同意,你作为所有者直接就能完成授权,不用找管理员
用PowerShell调用Graph API(适合批量或自动化场景)
如果门户操作不方便,用PowerShell也能搞定,同样用你的所有者权限:
- 先装Microsoft Graph模块:
Install-Module Microsoft.Graph -Force Import-Module Microsoft.Graph.Applications - 登录Tenant B:
这里的Connect-MgGraph -TenantId "TenantB的租户ID" -Scopes "Application.ReadWrite.All"Application.ReadWrite.All作为委派权限,你作为服务主体所有者一般能直接获取,不用管理员审批 - 拿到目标API的服务主体ID和要加的权限ID:
# 搜目标API应用的服务主体 $resourceSp = Get-MgServicePrincipal -Filter "displayName eq '目标API应用的名称'" # 提取需要的应用角色ID $targetAppRole = $resourceSp.AppRoles | Where-Object {$_.Value -eq "权限对应的value值"} - 给服务主体分配权限:
这里New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId "你的多租户应用在TenantB的服务主体ID" -PrincipalId "你的多租户应用在TenantB的服务主体ID" -ResourceId $resourceSp.Id -AppRoleId $targetAppRole.IdPrincipalId和ServicePrincipalId填的是同一个值,因为是给服务主体自身分配应用角色权限
重要提醒
- 如果目标API的权限设置为需要管理员同意,那不管用哪种方法都得找Tenant B的管理员审批,没有绕路的办法
- 核心就是利用Tenant B里现有服务主体的所有者权限,在租户内部完成权限分配,不用去Tenant A的应用注册里碰,也不用重新注册新应用
内容的提问来源于stack exchange,提问作者Sai Harshita
相关产品推荐
相关产品推荐

