能否在AWS Cognito允许的回调URL中使用占位符变量?
AWS Cognito回调URL使用变量的实现方案
AWS Cognito用户池的允许回调URL不支持直接使用占位符变量(比如你尝试的${slug}写法),Cognito会将整个字符串视为固定URL进行校验,因此API Gateway的阶段变量符号在这里无法生效。以下是几种可行的替代方案:
1. 预注册所有可能的回调URL
如果slug的取值范围有限且可提前预知,直接将所有完整的回调URL(如https://some-domain/slug1/loginOauth、https://some-domain/slug2/loginOauth)添加到Cognito应用客户端的允许回调URL列表中。这种方式简单直接,但仅适用于slug数量少、变动不频繁的场景。
2. 通用回调URL + 内部转发
注册一个统一的回调URL(如https://some-domain/callback),通过该端点完成二次转发:
- 在发起Cognito认证请求时,将
slug信息编码到state参数中(需做好签名校验,防止篡改) - 用户完成认证后,Cognito会重定向到该通用回调URL,同时携带
state参数 - 在通用回调端点解析
state中的slug,再将用户重定向到对应的https://some-domain/${slug}/loginOauth地址
3. 动态更新回调URL列表
通过AWS SDK或CLI编写自动化脚本,在slug新增/变更时,自动更新Cognito应用客户端的允许回调URL列表。示例AWS CLI命令如下:
aws cognito-idp update-user-pool-client \ --user-pool-id YOUR_USER_POOL_ID \ --client-id YOUR_CLIENT_ID \ --callback-urls '["https://some-domain/slug1/loginOauth", "https://some-domain/slug2/loginOauth"]'
这种方案适合slug动态变化的场景,但需为执行脚本的角色分配cognito-idp:UpdateUserPoolClient权限,同时注意避免并发更新的冲突问题。
内容的提问来源于stack exchange,提问作者jasonmcclurg
相关产品推荐
相关产品推荐

