调用AWS Cognito respond-to-auth-challenge报Invalid session provided如何解决
错误根因与解决方法
1. 会话值传入错误
这是你当前报错的最直接原因:initiate-auth返回的响应里,只有根层级的Session字段值才是后续提交挑战需要传入的会话凭证,你现在调用respond-to-auth-challenge时,错误传入了ChallengeParameters下USER_ID_FOR_SRP的sessions-xxxxx值,而非根级Session返回的sessions字符串,自然会提示会话无效。
2. 会话已过期
Cognito的挑战类会话默认有效期只有3分钟,如果两次调用间隔超过这个时长,会话会自动失效,需要重新调用initiate-auth获取新的会话值再提交挑战。
3. 挑战响应参数格式错误
CLI下用逗号分隔的字符串传--challenge-responses容易出现转义问题,尤其是密码包含特殊字符时大概率会解析失败,建议改用JSON格式传参,正确调用示例如下:
$ aws cognito-idp respond-to-auth-challenge \ --client-id client-id-xxxx \ --challenge-responses '{"NEW_PASSWORD": "Password1234", "USERNAME": "test@example.com"}' \ --challenge-name NEW_PASSWORD_REQUIRED \ --session 替换为initiate-auth返回的根级Session完整字符串
4. 客户端配置校验
请确认以下配置符合要求:
- 两次调用的
client-id完全一致,没有混用不同用户池客户端的ID - 你使用的Cognito客户端配置中,已经在允许的认证流里开启了
USER_PASSWORD_AUTH,未开启的认证流生成的会话会被直接判定为非法
完成以上校验和调整后,即可成功完成新密码设置,解除NEW_PASSWORD_REQUIRED状态。
内容的提问来源于stack exchange,提问作者jpskgc
相关产品推荐
相关产品推荐

