如何通过AWS CLI在Shell脚本中管理AWS Cognito回调URL
解决AWS Cognito用户池客户端回调URL的Shell脚本更新问题
核心问题解析
你遇到的两个关键点:
- 更新时配置被清空:AWS CLI的
update-user-pool-client命令默认是替换参数而非合并。如果你只传入--callback-urls,其他未指定的可配置参数会被重置为默认值,这就是之前其他配置丢失的原因。 - Shell脚本中检查并添加URL:需要先获取现有回调URL列表,判断目标URL是否存在,再合并更新,同时必须保留原有重要配置。
完整Shell脚本实现
下面是一个可直接使用的脚本,依赖jq工具(用于解析JSON,需提前安装:sudo apt install jq或brew install jq):
#!/bin/bash # 配置你的参数 USER_POOL_ID="us-west-2_asASD24d" CLIENT_ID="asdfasdf546a5s4df" REGION="us-west-2" TARGET_URL="https://test-jdtest.dev.com?oauth=callback" # 1. 获取现有回调URL列表(处理无回调URL的情况,返回空数组) EXISTING_CALLBACKS=$(aws cognito-idp describe-user-pool-client \ --user-pool-id "$USER_POOL_ID" \ --client-id "$CLIENT_ID" \ --region "$REGION" \ | jq -r '.UserPoolClient.CallbackUrls // []') # 2. 检查目标URL是否已存在于列表中 if echo "$EXISTING_CALLBACKS" | jq --arg url "$TARGET_URL" '. | index($url)' | grep -q null; then # 3. 合并新URL到现有列表 NEW_CALLBACKS=$(echo "$EXISTING_CALLBACKS" | jq --arg url "$TARGET_URL" '. + [$url]') echo "准备添加新回调URL: $TARGET_URL" # 4. 获取需要保留的关键配置(避免更新时重置) ALLOWED_OAUTH_FLOWS=$(aws cognito-idp describe-user-pool-client \ --user-pool-id "$USER_POOL_ID" \ --client-id "$CLIENT_ID" \ --region "$REGION" \ | jq -r '.UserPoolClient.AllowedOAuthFlows // []') ALLOWED_OAUTH_SCOPES=$(aws cognito-idp describe-user-pool-client \ --user-pool-id "$USER_POOL_ID" \ --client-id "$CLIENT_ID" \ --region "$REGION" \ | jq -r '.UserPoolClient.AllowedOAuthScopes // []') ALLOWED_OAUTH_FLOWS_USER_POOL_CLIENT=$(aws cognito-idp describe-user-pool-client \ --user-pool-id "$USER_POOL_ID" \ --client-id "$CLIENT_ID" \ --region "$REGION" \ | jq -r '.UserPoolClient.AllowedOAuthFlowsUserPoolClient') # 5. 执行更新命令,传入所有需要保留的配置 aws cognito-idp update-user-pool-client \ --user-pool-id "$USER_POOL_ID" \ --client-id "$CLIENT_ID" \ --region "$REGION" \ --callback-urls "$NEW_CALLBACKS" \ --allowed-oauth-flows "$ALLOWED_OAUTH_FLOWS" \ --allowed-oauth-scopes "$ALLOWED_OAUTH_SCOPES" \ --allowed-oauth-flows-user-pool-client "$ALLOWED_OAUTH_FLOWS_USER_POOL_CLIENT" echo "回调URL更新完成!" else echo "目标URL $TARGET_URL 已存在,无需修改。" fi
关键说明
为什么要保留其他参数?
update-user-pool-client不会自动保留原有配置,任何未在命令中指定的参数都会被重置为默认值。比如你原来配置的OAuth授权流、权限范围,如果不传入更新命令,会被清空,导致客户端无法正常工作。如何确定需要保留哪些参数?
运行aws cognito-idp describe-user-pool-client查看完整客户端配置,把所有非只读的配置项(比如LogoutUrls、DefaultRedirectUri等,如果你的客户端用到了)都添加到更新命令中。
也可以用aws cognito-idp update-user-pool-client --generate-cli-skeleton查看所有可更新的参数列表。处理空列表情况
脚本中用// []确保如果客户端原本没有回调URL,也能正常生成空数组,避免合并时出错。
内容的提问来源于stack exchange,提问作者Jayesh Dhandha
相关产品推荐
相关产品推荐

