在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
相关产品推荐
相关产品推荐

