You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS CLI在Shell脚本中管理AWS Cognito回调URL

解决AWS Cognito用户池客户端回调URL的Shell脚本更新问题

核心问题解析

你遇到的两个关键点:

  1. 更新时配置被清空:AWS CLI的update-user-pool-client命令默认是替换参数而非合并。如果你只传入--callback-urls,其他未指定的可配置参数会被重置为默认值,这就是之前其他配置丢失的原因。
  2. 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

关键说明

  1. 为什么要保留其他参数?
    update-user-pool-client不会自动保留原有配置,任何未在命令中指定的参数都会被重置为默认值。比如你原来配置的OAuth授权流、权限范围,如果不传入更新命令,会被清空,导致客户端无法正常工作。

  2. 如何确定需要保留哪些参数?
    运行aws cognito-idp describe-user-pool-client查看完整客户端配置,把所有非只读的配置项(比如LogoutUrls、DefaultRedirectUri等,如果你的客户端用到了)都添加到更新命令中。
    也可以用aws cognito-idp update-user-pool-client --generate-cli-skeleton查看所有可更新的参数列表。

  3. 处理空列表情况
    脚本中用// []确保如果客户端原本没有回调URL,也能正常生成空数组,避免合并时出错。


内容的提问来源于stack exchange,提问作者Jayesh Dhandha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:43:42