求助:使用Microsoft Graph API筛选指定Azure应用注册信息失败
解决Graph API /applications端点过滤不生效及获取应用所有者的问题
问题根源
你遇到的返回所有应用而非指定应用的问题,是因为PowerShell中双引号字符串会自动解析$开头的内容为变量。你的Uri用双引号包裹时,$filter会被当作PowerShell变量(而非URL参数),而你没有定义这个变量,导致最终发送的请求URL丢失了过滤条件,因此返回所有应用。
解决步骤
1. 修正Uri的引号使用
将Uri用单引号包裹,避免PowerShell解析$filter:
Invoke-RestMethod -Uri 'https://graph.microsoft.com/v1.0/applications?$filter=appId eq ''f059f748-6b42-46ec-8d5b-23a0fee126ee''' -Headers $headers -Method GET
或者用反引号转义$`符号(双引号内):
Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/applications?`$filter=appId eq 'f059f748-6b42-46ec-8d5b-23a0fee126ee'" -Headers $headers -Method GET
2. 验证请求URL
可以先输出Uri确认是否正确:
$uri = 'https://graph.microsoft.com/v1.0/applications?$filter=appId eq ''f059f748-6b42-46ec-8d5b-23a0fee126ee''' Write-Host $uri
确保输出的URL包含完整的$filter参数。
3. 获取应用所有者
拿到指定应用后,有两种方式获取其所有者:
方式一:单独调用owners端点
先获取应用的id属性,再请求:
# 获取指定应用 $app = Invoke-RestMethod -Uri 'https://graph.microsoft.com/v1.0/applications?$filter=appId eq ''f059f748-6b42-46ec-8d5b-23a0fee126ee''' -Headers $headers -Method GET # 获取应用所有者 $owners = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/applications/$($app.value[0].id)/owners" -Headers $headers -Method GET
方式二:请求应用时直接展开所有者
用$expand=owners参数一次性获取应用及所有者信息:
$result = Invoke-RestMethod -Uri 'https://graph.microsoft.com/v1.0/applications?$filter=appId eq ''f059f748-6b42-46ec-8d5b-23a0fee126ee''&$expand=owners' -Headers $headers -Method GET $owners = $result.value[0].owners
权限说明
确保你的服务主体已被授予以下Graph API应用权限:
Application.Read.All(读取所有应用信息)Directory.Read.All(读取目录对象,包括所有者)
内容的提问来源于stack exchange,提问作者opperska
相关产品推荐
相关产品推荐

