使用PowerShell和Microsoft Graph访问租户合作信息遇权限问题
问题场景
我在使用PowerShell通过Microsoft Graph访问租户合作数据时遇到问题,主要尝试执行Get-MgTenantRelationshipDelegatedAdminRelationship和Get-MgTenantRelationshipDelegatedAdminCustomer命令。已分配DelegatedAdminRelationship.Read.All及其他相关权限,但无法得到预期结果。
已执行操作与预期
- 操作:通过
Connect-MgGraph完成身份验证后执行上述命令 - 权限:确认账号已拥有
DelegatedAdminRelationship.Read.All权限 - 预期:获取委托管理员关系和客户的详细数据
- 结果:返回401未授权错误或无数据
错误信息
Get-MgTenantRelationshipDelegatedAdminRelationship : 您无权访问该资源。状态码: 401 (未授权)
错误代码: unauthorized 日期: 2024-03-01T09:07:43 响应头:
Transfer-Encoding : chunked Vary
: Accept-Encoding Strict-Transport-Security : max-age=31536000
request-id : 51583309-64d1-4d66-b506-c128eccb8a61
client-request-id : 89376944-beb1-4bee-bda9-f00293cbe93c
x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"Central US","Slice":"E","Ring":"2","ScaleUnit":"000","RoleInstance":"DS1PEPF000051DF"}}
Date : Fri, 01 Mar 2024 09:07:43 GMT Au
caractère Ligne:1 : 1
- Get-MgTenantRelationshipDelegatedAdminRelationship
+ CategoryInfo : InvalidOperation : ({ Top = , Skip ... , Headers = }:<>f__AnonymousType6`9)[Get-MgTenantRel...lationship_List], Exception
- FullyQualifiedErrorId : unauthorized,Microsoft.Graph.PowerShell.Cmdlets.GetMgTenantRelationshipDelegatedAdminRelationship_List
疑问
- 是否存在我遗漏的特定权限配置或步骤以成功使用这些命令?
- 是否有其他有效访问此类信息的方法或命令?
解决方案建议
1. 验证权限类型与授予方式
DelegatedAdminRelationship.Read.All支持应用权限和委派权限:
- 若使用委派权限,需在身份验证时明确指定作用域:
Connect-MgGraph -Scopes "DelegatedAdminRelationship.Read.All" - 若使用应用权限,需在Azure AD应用注册中分配该权限并完成管理员同意,同时使用应用凭据登录:
Connect-MgGraph -ClientId "YOUR_APP_ID" -TenantId "YOUR_TENANT_ID" -CertificateThumbprint "YOUR_CERT_THUMBPRINT"
2. 检查账号角色与租户关系
- 确保当前账号是委派管理员,或在合作伙伴租户中拥有对应管理员权限,仅持有权限但无实际委派关系会返回无数据,权限配置错误则触发401。
- 确认租户间已建立有效的委托管理员关系,无关系时命令返回空结果而非401。
3. 更新Graph PowerShell模块
旧版本模块可能存在API兼容问题,更新至最新版本:
Update-Module Microsoft.Graph
4. 替代访问方法
若PowerShell命令仍异常,可直接调用Microsoft Graph REST API测试:
$token = (Get-MgContext).AccessToken Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/tenantRelationships/delegatedAdminRelationships" -Headers @{Authorization = "Bearer $token"}
也可通过Graph Explorer测试API,排除PowerShell模块本身的问题。
5. 确认权限生效状态
权限授予后可能需等待数分钟生效,同时检查是否遗漏关联权限(如Directory.Read.All,若需读取客户目录信息),核心权限仍为DelegatedAdminRelationship.Read.All。
内容的提问来源于stack exchange,提问作者Simon Mocquet

