AWS Cognito CLI中UserAttributes特殊字符转义问题求助
AWS Cognito更新含大括号的自定义属性字符串问题
我需要修改AWS Cognito中包含{、}字符的自定义属性值,该属性值是JSON格式的字符串(而非实际对象),现有属性格式如下:
"UserAttributes": [ { "Name": "custom:bla-bla", "Value": "{\"scope\":{\"test\":\"1111111\"}}" } ]
尝试的操作及报错
直接执行更新命令
执行以下AWS CLI命令:
aws cognito-idp update-user-attributes --region [REGION] --access-token [TOKEN] --user-attributes Name="custom:bla-bla",Value="{\"scope\":{\"test\":\"222222\"}}"
出现解析错误:
Error parsing parameter '--user-attributes': Expected: '=', received: '"' for input: Name=name2,Value={"scope":{"test":"222222"}} ^
尝试转义大括号
修改为转义大括号的形式:
Value="\{\"scope\":\{\"test\":\"222222\"\}\}"
仍报错:
Error parsing parameter '--user-attributes': Expected: ',', received: '"' for input: Name=name2,Value=\{"scope":{"test":"222222"\}\} ^
按CLI提示格式输入
改用无引号的嵌套格式:
Value="{scope={test=222222}}"
触发类型错误:
Parameter validation failed: Invalid type for parameter UserAttributes[0].Value, value: {'scope': {'test': '222222'}}, type: <class 'dict'>, valid types: <class 'str'>
解决方案
问题核心是AWS CLI会解析--user-attributes中的逗号分隔键值对,当值包含{}、"等特殊字符时,容易触发解析冲突,以下是几种可行的解决方法:
方法1:Shell单引号包裹属性值
利用Shell单引号的特性(内部内容不被解析),将整个--user-attributes参数用单引号包裹,或者单独包裹属性值:
# 方式A:包裹整个参数 aws cognito-idp update-user-attributes --region [REGION] --access-token [TOKEN] --user-attributes 'Name="custom:bla-bla",Value="{\"scope\":{\"test\":\"222222\"}}"' # 方式B:仅包裹Value值 aws cognito-idp update-user-attributes --region [REGION] --access-token [TOKEN] --user-attributes Name=custom:bla-bla,Value='{"scope":{"test":"222222"}}'
方法2:使用JSON文件作为输入
创建JSON配置文件(例如user-attrs.json),内容如下:
[ { "Name": "custom:bla-bla", "Value": "{\"scope\":{\"test\":\"222222\"}}" } ]
通过--cli-input-json参数调用,完全规避命令行解析问题:
aws cognito-idp update-user-attributes --region [REGION] --access-token [TOKEN] --cli-input-json file://user-attrs.json
方法3:传递数组格式的参数
直接以数组结构传递--user-attributes参数,避免逗号分隔的键值对解析逻辑:
aws cognito-idp update-user-attributes --region [REGION] --access-token [TOKEN] --user-attributes '[{"Name": "custom:bla-bla", "Value": "{\"scope\":{\"test\":\"222222\"}}"}]'
内容的提问来源于stack exchange,提问作者lazerru
相关产品推荐
相关产品推荐

