调用Graph API为AAD用户分配经理返回400错误该如何解决?
错误原因
- URI解析异常:PowerShell双引号内的
$ref会被识别为本地变量自动替换为空,最终请求的URI不符合接口要求,触发400错误。 - 请求体字段错误:
$ref类型接口要求请求体必须携带@odata.id字段,而非你使用的id字段。 - 字段值格式错误:你填写的ID前多了无效的
string前缀,且该字段需要传入经理用户的完整Graph资源路径,不能仅传入ID。 - 哈希表键未转义:PowerShell中以
@开头的哈希表键需要用引号包裹,否则会被识别为 splatting 语法抛出错误。
修正后的代码
$Header = @{ Authorization = "$($Request.token_type) $($Request.access_token)" } $bodyProcess = @{ # 键必须加引号包裹,值为经理用户的完整资源路径,替换为实际的经理用户ID即可 '@odata.id' = "https://graph.microsoft.com/v1.0/users/aa9999a1-1111-11a2-abab-asfdas32" } $body = $bodyProcess | ConvertTo-Json # URI用单引号包裹,避免$ref被PowerShell解析为变量 $Uri = 'https://graph.microsoft.com/v1.0/users/4d5f6c5a-0e69-40b6-a86d-e825582add50/manager/$ref' $UserData = Invoke-RestMethod -Uri $Uri -Headers $Header -Method PUT -ContentType "application/json" -Body $Body
额外注意事项
- 需确保请求使用的令牌包含
User.ReadWrite.All或Directory.ReadWrite.All权限,权限类型需和调用场景匹配:委托权限适用于有用户登录的交互场景,应用权限适用于无用户的后台服务场景。 - 若使用全局管理员角色操作,无需额外授权也可完成该操作。
内容的提问来源于stack exchange,提问作者RogueIT
相关产品推荐
相关产品推荐

