使用New-AzureADGroupAppRoleAssignment分配组应用角色报错咨询
报错根因
你遇到的Request_BadRequest: Not a valid reference update错误,核心原因是对New-AzureADGroupAppRoleAssignment的四个必填参数的对应对象理解完全错位,该cmdlet所有ID类参数均需传入GUID格式的对象ID,不支持传入显示名、应用客户端ID等值。
参数正确定义
四个参数的正确对应关系如下:
-ObjectId:待分配应用角色的Azure AD安全组/M365组的对象ID-Id:目标应用角色本身的ID(即应用角色定义中自带的GUID标识)-PrincipalId:权限主体的对象ID,给组分配角色时和-ObjectId取值完全一致,填入同一个组对象ID即可-ResourceId:承载该应用角色的企业应用对应服务主体的对象ID(注意不是应用注册的对象ID,也不是应用角色ID)
可直接运行的正确脚本示例
不要手动硬填ID,先通过命令拉取对应对象再传参,能避免绝大多数参数错误:
# 1. 读取目标组对象 $targetGroupName = "替换为你的目标组显示名" $targetGroup = Get-AzureADGroup -Filter "Displayname eq '$targetGroupName'" # 2. 读取目标企业应用对应的服务主体对象 $targetAppName = "替换为你的企业应用显示名" $targetServicePrincipal = Get-AzureADServicePrincipal -Filter "Displayname eq '$targetAppName'" # 3. 读取要分配的目标应用角色 $targetRoleName = "替换为你要分配的应用角色值" $targetAppRole = $targetServicePrincipal.AppRoles | Where-Object { $_.Value -eq $targetRoleName -and $_.AllowedMemberTypes -contains "Group" } # 4. 执行角色分配 New-AzureADGroupAppRoleAssignment ` -ObjectId $targetGroup.ObjectId ` -Id $targetAppRole.Id ` -PrincipalId $targetGroup.ObjectId ` -ResourceId $targetServicePrincipal.ObjectId
常见踩坑说明
- 必须使用企业应用对应的服务主体ObjectId作为
ResourceId,不能使用应用注册的ObjectId或者应用客户端ID(ClientId),二者属于不同的目录对象,ID值不通用。 - 分配前确认目标应用角色的
AllowedMemberTypes属性包含Group,否则即使参数正确也会分配失败,你在门户中能完成分配的角色默认已经满足该要求。 - 不要给任何ID参数传入显示名字符串,该cmdlet所有ID参数仅接受GUID格式的对象标识。
内容的提问来源于stack exchange,提问作者Chris Balk
相关产品推荐
相关产品推荐

