使用PowerShell PATCH更新Entra应用AppRoles报BadRequest问题排查
解决Entra ID应用注册App Roles更新的BadRequest错误
场景概述
通过BICEP的Microsoft.Resources/deploymentScripts@2023-08-01资源,在DevOps流水线中自动化管理Microsoft Entra ID应用注册,已实现应用创建、密钥更新、API权限配置等功能,但在添加/更新App Roles时遇到报错。
错误信息
读取JSON时发现意外的'PrimitiveValue'节点,预期为'StartArray'节点
排查步骤
- 验证应用注册存在,托管标识拥有足够的Entra ID操作权限,代码逻辑对齐官方App Roles更新示例
- 检查请求日志发现:生成的JSON payload中,
allowedMemberTypes字段被序列化为字符串,但代码中明确定义为数组类型
根因与解决方法
问题源于PowerShell的ConvertTo-Json命令默认深度限制,导致嵌套数组结构被错误转换为字符串。解决方法是显式设置-Depth参数(建议根据实际嵌套层级设置足够大的值,比如10),确保数组结构正确序列化:
# 构造App Roles payload并正确序列化 $appRolesUpdateBody = @{ appRoles = @( @{ allowedMemberTypes = @("User", "Application") displayName = "Editor" id = [Guid]::NewGuid().ToString() isEnabled = $true description = "Can edit resources" value = "Editor" } ) } | ConvertTo-Json -Depth 10 # 调用Graph API更新应用注册 Invoke-MgGraphRequest -Method Patch -Uri "/applications/{appId}" -Body $appRolesUpdateBody
内容的提问来源于stack exchange,提问作者RichioRobo
相关产品推荐
相关产品推荐

