AWS Cognito用户确认时SecretHash不匹配错误的排查求助
AWS Cognito 用户确认时 SecretHash 不匹配问题排查
错误信息
{"errorMessage": "SecretHash does not match for the client: [REDACTED] (Service: AWSCognitoIdentityProvider; Status Code: 400; Error Code: NotAuthorizedException; Request ID: [REDACTED]; Proxy: null)","errorType": "com.amazonaws.services.cognitoidp.model.NotAuthorizedException","stackTrace": [...]}
可能的问题及排查方向
SecretHash 计算参数不一致
确认注册和用户确认两个步骤中,计算SecretHash时使用的客户端ID、客户端密钥、用户名三者完全一致:- Cognito用户名默认大小写敏感,确保两次使用的用户名大小写完全相同
- 若注册时用邮箱作为用户名,确认时必须使用相同的邮箱字符串,不能替换为其他用户标识
客户端配置不匹配
- 检查Cognito应用客户端是否启用了客户端密钥:如果客户端未设置密钥,请求中不需要传递SecretHash,强行传入会导致不匹配
- 确认客户端的认证流程配置(ALLOW_REFRESH_TOKEN_AUTH、ALLOW_USER_PASSWORD_AUTH)是否要求必须传递SecretHash,确保代码逻辑和后台配置一致
SecretHash 实现逻辑错误
核对calculateSecretHash方法是否严格遵循AWS规范:- 算法必须为HMAC-SHA256
- 消息内容为
用户名 + 客户端ID的拼接字符串 - 密钥为Cognito应用客户端的客户端密钥
- 最终结果需进行Base64编码
可以手动用在线HMAC工具计算对比,验证代码生成的SecretHash是否正确
请求参数传递错误
- 确认
confirmSignUp请求中传入的SecretHash是基于当前待确认用户的用户名计算的,而非复用注册时的旧值 - 检查SecretHash是否存在字符串转义、编码异常(比如多余空格、特殊字符未正确处理)
- 确认
验证建议
- 手动计算SecretHash:将用户名+客户端ID作为输入消息,客户端密钥作为密钥,用HMAC-SHA256算法计算后Base64编码,和代码生成的值对比
- 开启CloudTrail日志,查看Cognito请求中的SecretHash参数是否和预期一致
内容的提问来源于stack exchange,提问作者WDE
相关产品推荐
相关产品推荐

