Cognito client_credentials流令牌调用ALB后端返回401问题排查
问题排查步骤
1. 校验ALB Cognito认证器配置
- 确认ALB监听器规则绑定的Cognito用户池ARN、客户端ID,与你申请令牌使用的用户池、客户端完全一致,无字符拼写、大小写错误。
- 检查认证器的令牌校验规则:client credentials流返回的是
access_token,需确认认证器已配置为接受access_token校验,而非仅支持id_token。 - 检查scope校验配置:你JWT内的scope为
testapp.development/access,需确认认证器已允许该自定义scope,未配置不匹配的scope校验规则。
2. 校验令牌本身有效性
- 确认JWT中
iss字段对应的用户池IDus-east-1_<mypool-id>,与ALB认证器绑定的用户池ID完全一致。 - 转换JWT中的
exp时间戳为本地时间,确认令牌未过期。
3. 修正请求配置错误
- 无需在请求路径或查询参数中携带scope,ALB的Cognito认证仅从
Authorization请求头提取令牌校验,修改路径反而可能导致无法匹配ALB监听器的/graphql路径规则。 - 你在申请令牌时携带的
redirect_uri参数是多余的,client credentials流不需要该参数,申请令牌时建议将所有参数放在请求体而非URL查询串中,参考请求示例:
curl --location --request POST 'https://<MYDOMAIN>.auth.us-east-1.amazoncognito.com/oauth2/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'client_id=MYCLIENTID' \ --data-urlencode 'client_secret=MYCLIENTSECRET' \ --data-urlencode 'scope=testapp.development/access'
4. 校验Cognito侧配置
- 确认Cognito用户池内已创建标识符为
testapp.development的资源服务器,且该资源服务器下存在accessscope。 - 确认你申请令牌使用的客户端,已被授权
testapp.development/access这个自定义scope。
内容的提问来源于stack exchange,提问作者puffin
相关产品推荐
相关产品推荐

