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

关于从AWS CloudFormation模板获取Cognito用户池应用客户端托管UI登录URL及自动化集成的技术问询

如何从AWS CloudFormation模板获取Cognito用户池应用客户端的托管UI登录URL并实现自动化集成

当然可以实现!我来给你拆解两种靠谱的方式,不管是在CloudFormation里直接输出,还是后续用CLI查询,都能完美适配你SPA流水线的自动化需求。

一、在CloudFormation模板中直接输出登录URL

Cognito托管UI的登录URL是有固定格式的:https://<用户池域名>/login?client_id=<客户端ID>&response_type=<响应类型>&scope=<权限范围>&redirect_uri=<回调地址>

你可以在CloudFormation模板的Outputs部分,用Fn::Sub(YAML里是!Sub)来动态拼接这个URL,这样堆栈部署完成后,直接就能拿到现成的登录地址。示例代码如下:

Outputs:
  CognitoLoginUrl:
    Description: Cognito托管UI登录URL
    Value: !Sub 'https://${UserPoolDomainResource}/login?client_id=${UserPoolClientResource}&response_type=code&scope=openid&redirect_uri=${SPAOrigin}/callback'
    Export:
      Name: !Sub "${AWS::StackName}-CognitoLoginUrl"

这里的UserPoolDomainResource是你定义的Cognito用户池域名资源(AWS::Cognito::UserPoolDomain)的逻辑ID,UserPoolClientResource是应用客户端资源(AWS::Cognito::UserPoolClient)的逻辑ID,SPAOrigin是你的SPA域名参数或资源引用,按需替换即可。

二、通过CLI在SPA流水线中获取URL

如果已经在CloudFormation里配置了输出,那么用CLI就能轻松提取这个URL,注入到你的SPA编译流程中:

方式1:用aws cloudformation describe-stacks查询堆栈输出

# 替换成你的CloudFormation堆栈名称
STACK_NAME="your-aws-stack-name"
COGNITO_LOGIN_URL=$(aws cloudformation describe-stacks --stack-name $STACK_NAME --query "Stacks[0].Outputs[?OutputKey=='CognitoLoginUrl'].OutputValue" --output text)

执行这个命令后,COGNITO_LOGIN_URL变量就会存储登录地址,你可以把它写入SPA的环境变量文件(比如.env),或者直接传递给编译命令。

方式2:用aws cloudformation list-exports查询导出的输出

如果在模板里配置了Export,也可以通过导出名称来查询:

# 替换成你的导出名称(就是模板里Export.Name的值)
EXPORT_NAME="your-stack-name-CognitoLoginUrl"
COGNITO_LOGIN_URL=$(aws cloudformation list-exports --query "Exports[?Name=='$EXPORT_NAME'].Value" --output text)

备选方案:直接查询Cognito资源拼接URL

如果因为某些原因没法在CloudFormation里输出,也可以直接通过CLI查询Cognito的资源信息来拼接URL:

# 替换成你的用户池名称
USER_POOL_NAME="your-user-pool-name"
# 替换成你的应用客户端名称
CLIENT_NAME="your-app-client-name"
# 替换成你的SPA回调地址
REDIRECT_URI="https://your-spa-domain.com/callback"

USER_POOL_ID=$(aws cognito-idp list-user-pools --max-results 10 --query "UserPools[?Name=='$USER_POOL_NAME'].Id" --output text)
USER_POOL_CLIENT_ID=$(aws cognito-idp list-user-pool-clients --user-pool-id $USER_POOL_ID --query "UserPoolClients[?ClientName=='$CLIENT_NAME'].ClientId" --output text)
USER_POOL_DOMAIN=$(aws cognito-idp describe-user-pool-domain --domain "your-user-pool-domain" --query "DomainDescription.Domain" --output text)

COGNITO_LOGIN_URL="https://$USER_POOL_DOMAIN/login?client_id=$USER_POOL_CLIENT_ID&response_type=code&scope=openid&redirect_uri=$REDIRECT_URI"

不过这种方式不如堆栈输出可靠,因为用户池或客户端名称可能存在重复,而堆栈输出是和你的部署直接绑定的,一致性更强。

你的思路完全正确!在SPA流水线编译前通过CLI获取这个URL,既避免了硬编码配置的维护麻烦,又能保证不同环境(开发/测试/生产)的配置一致性,是非常合理的自动化实践。

备注:内容来源于stack exchange,提问作者fudo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:57:45