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

在Karate API框架获取Access Token时遇400错误及资源不存在异常

使用Karate框架调用AWS Cognito获取Access Token时遇到400错误(ResourceNotFoundException)

问题重现

调用AWS Cognito的InitiateAuth接口刷新令牌时,返回400状态码,错误信息如下:

{"__type":"ResourceNotFoundException","message":"User pool client clientId does not exist."}

使用的Karate测试脚本如下(refreshToken和clientId参数来自karate-config.js):

Feature: Get Token

Background:
* header Content-Type = 'application/x-amz-json-1.1'
* header X-Amz-Target = 'AWSCognitoIdentityProviderService.InitiateAuth'


  Scenario: Get access token
    Given url 'https://cognito-idp.us-east-1.amazonaws.com/'
    And request {"AuthParameters" : {"REFRESH_TOKEN" : refreshToken},"AuthFlow" : "REFRESH_TOKEN_AUTH","ClientId" : clientId } 
    When method post 
    Then status 200
    * print response

解决方案

  • 核对ClientId的准确性
    确认karate-config.js中配置的clientId与AWS Cognito用户池内创建的应用客户端ID完全一致,注意区分大小写,不要包含多余空格或特殊字符。可以直接从AWS控制台的「用户池→应用客户端」页面复制正确的ClientId。

  • 验证用户池与ClientId的归属关系
    确保该ClientId属于当前请求的us-east-1区域用户池。如果用户池在其他区域,需要修改请求URL的区域后缀(如us-west-2),同时确认ClientId归属于对应区域的用户池。

  • 检查应用客户端的认证流权限
    登录AWS控制台,找到目标用户池的应用客户端设置,确认「认证流配置」中已勾选「允许刷新令牌认证(REFRESH_TOKEN_AUTH)」选项。

  • 确认refreshToken的匹配性
    虽然错误提示指向ClientId,但如果refreshToken由其他用户池或其他ClientId生成,也可能触发类似错误。确保refreshToken与当前使用的ClientId属于同一个用户池。

  • 调试参数加载情况
    在测试脚本中添加打印语句,确认clientId是否正确从配置文件加载:

    Scenario: Get access token
      * print "Loaded clientId:", clientId  # 新增打印语句验证参数
      Given url 'https://cognito-idp.us-east-1.amazonaws.com/'
      And request {"AuthParameters" : {"REFRESH_TOKEN" : refreshToken},"AuthFlow" : "REFRESH_TOKEN_AUTH","ClientId" : clientId } 
      When method post 
      Then status 200
      * print response
    

    运行测试后查看控制台输出,确认clientId的值符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:50