Azure AD应用添加可选声明后未在清单中生效求助
问题分析与解决
你的代码存在几个关键问题,导致可选声明无法在Azure AD应用清单中生效:
重复JSON序列化导致格式错误
你连续执行了两次ConvertTo-Json,第一次已将对象转为压缩后的JSON字符串,第二次会把这个字符串再次转成JSON,最终得到的是被转义的字符串,而非Azure CLI所需的JSON对象结构。变量引用被单引号包裹无法解析
在az ad app update命令中,你用单引号'$optionalClaims'包裹变量,PowerShell中单引号不会展开变量,导致实际传递给CLI的是字符串$optionalClaims,而非变量存储的JSON值。essential属性类型错误
Azure AD要求essential是布尔类型(true/false),但你设置的是字符串"true",不符合格式要求。命令参数格式错误
--id和$($application.appId)之间缺少空格,CLI无法正确识别参数值。
修正后的代码
# 构建idToken声明数组,注意essential为布尔值 $idTokenClaim = @( [PSCustomObject]@{ name = "upn" source = $null essential = $true additionalProperties = @() } ) # 构建可选声明对象并仅序列化一次JSON $optionalClaims = @{ idToken = $idTokenClaim accessToken = @() saml2Token = @() } | ConvertTo-Json -Compress # 执行Azure CLI命令,修正参数空格与变量引用方式 az ad app update --id $($application.appId) --optional-claims "$optionalClaims"
验证方法
执行命令后,可通过以下方式确认修改是否生效:
- 登录Azure门户,找到对应应用注册的清单页面,查看
optionalClaims字段是否已正确填充 - 使用Azure CLI命令查询:
az ad app show --id $($application.appId) --query "optionalClaims"
内容的提问来源于stack exchange,提问作者Amal Ps
相关产品推荐
相关产品推荐

