使用PowerShell调用Graph API更新托管身份权限时POST报无效引用更新
解决PowerShell调用Graph API添加托管身份应用角色分配时的“Not a valid reference update”错误
你的问题核心是请求体的字段名不符合Microsoft Graph API的规范,导致返回“Not a valid reference update”错误。
问题根源
Graph API对JSON请求体的字段名大小写敏感,你当前代码里的principalID和resourceID(末尾大写D)不符合API要求的驼峰命名格式,正确的字段名应该是principalId和resourceId(末尾小写d)。PowerShell哈希表转JSON时会严格保留原字段名,所以API无法识别你的请求体。
修正后的代码
# 修正字段名为Graph API要求的驼峰格式 $POSTBody = @{ principalId = "$($MIDData.id)" resourceId = "$ObjectID" appRoleId = "$($TEMProle.id)" } # 验证JSON输出格式 $POSTBody | ConvertTo-Json $AppRoleAssignment = "https://graph.microsoft.com/beta/servicePrincipals/$ObjectID/appRoleAssignedTo" Invoke-RestMethod -Uri $AppRoleAssignment -Headers @{Authorization = "Bearer $($TokenAccess)" } -Method POST -Body ($POSTBody | ConvertTo-Json) -ContentType "application/json"
额外排查点
- 确认
appRoleId是目标服务主体(resourceId对应的对象)上已存在的有效应用角色ID,不能使用随机ID或其他服务主体的角色ID - 确保你用来获取令牌的应用注册已被授予
AppRoleAssignment.ReadWrite.All或Application.ReadWrite.All权限,且完成了管理员同意 - 检查托管身份(
principalId对应的对象)状态正常,未被禁用
内容的提问来源于stack exchange,提问作者thekevinkalis
相关产品推荐
相关产品推荐

