AWS Cognito RefreshToken报错“Invalid Refresh Token”排查求助
解决Cognito REFRESH_TOKEN_AUTH 提示"Invalid Refresh Token"的问题
排查方向1:修正API参数
initiateAuth接口在REFRESH_TOKEN_AUTH流程下不需要传递UserPoolId,多余的参数会触发错误校验逻辑。Cognito通过ClientId和RefreshToken即可关联到对应用户池,移除该参数后重试:
$result = $client->initiateAuth([ 'AuthFlow' => 'REFRESH_TOKEN_AUTH', 'ClientId' => $clientID, 'AuthParameters' => [ 'REFRESH_TOKEN' => $refreshToken, 'SECRET_HASH' => $secret_hash, ], ]);
排查方向2:验证Secret Hash生成逻辑
若App Client开启了Generate client secret,Secret Hash必须严格遵循HMAC-SHA256(客户端密钥, 用户名 + 客户端ID)规则生成:
- 确认生成时使用的用户名是当前RefreshToken关联用户的用户名(大小写敏感)
- 客户端密钥需用App Client的Secret值,而非ClientId
- 参考正确生成代码:
$secret_hash = hash_hmac('sha256', $username . $clientID, $clientSecret, true); $secret_hash = base64_encode($secret_hash);
排查方向3:检查Refresh Token状态
- 确认该Refresh Token未被撤销过:已撤销的Token调用
revokeToken仍会返回成功,但无法用于刷新 - 查看用户池的Refresh Token有效期配置,若超过有效期则会失效
- 确认用户未修改过密码:密码修改后,旧Refresh Token会被系统自动失效
排查方向4:检查SDK与环境配置
- 升级AWS PHP SDK到最新稳定版,避免旧版本的参数兼容问题
- 确保客户端初始化时的Region配置与用户池所在Region完全一致
长期保持登录的优化方案
- 在Cognito控制台的App Client设置中,将Refresh Token有效期设为最大值(3650天),降低用户重新登录频率
- 实现自动刷新逻辑:在AccessToken过期前(如提前5分钟)调用刷新接口,更新前端存储的令牌信息
- 增加降级处理:若Refresh Token失效,引导用户进行静默登录(若支持)或重新登录
内容的提问来源于stack exchange,提问作者Dipak PHP
相关产品推荐
相关产品推荐

