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

如何生成Amazon Cognito DEVICE_PASSWORD_VERIFIER的PASSWORD_CLAIM_SIGNATURE值?

问题:Amazon Cognito DEVICE_PASSWORD_VERIFIER 挑战响应生成失败,抛出NotAuthorizedException
  • 已成功通过DEVICE_SRP_AUTH挑战,但在处理DEVICE_PASSWORD_VERIFIER阶段时,始终收到NotAuthorizedException: Invalid username or password错误
  • 使用AWS Java SDK,采用ADMIN_USER_PASSWORD_AUTH认证流程,调用adminRespondToAuthChallenge方法发起挑战响应
  • 推测问题出在SRP_A或PASSWORD_CLAIM_SIGNATURE的生成逻辑上,相关实现代码位于DeviceHelper类中
  • 已创建脱敏后的临时代码仓库,填充环境变量即可直接运行复现问题
  • 用户池已配置设备追踪及对应应用设置(附设置截图:[设备追踪设置]、[应用设置])
  • 已查阅亚马逊官方文档及Stack Overflow相关帖子,仍无法定位并解决问题

排查建议

  1. 验证SRP_A生成逻辑
    • 确保SRP_A的生成严格遵循Cognito的SRP规范:使用2048位大质数N和生成元g,且SRP_A不能为0或N的倍数
    • 检查Java代码中BigInteger的初始化、模运算等步骤是否正确,避免出现计算溢出或逻辑错误
  2. 检查PASSWORD_CLAIM_SIGNATURE生成
    • 确认签名时使用的参数顺序和内容正确:必须包含DEVICE_KEY、USERNAME、SECRET_HASH(若应用开启客户端密钥)、SRP_A、SRP_B等核心参数
    • 验证HMAC算法实现:Cognito要求使用HMAC-SHA256,签名密钥需为DEVICE_SRP_AUTH阶段获取的DEVICE_SECRET_VERIFIER_CONFIG.DEVICE_SECRET
  3. 核对挑战响应参数
    • 确保adminRespondToAuthChallenge请求中包含所有必填参数:CHALLENGE_NAME设为DEVICE_PASSWORD_VERIFIER,CHALLENGE_RESPONSES需包含USERNAME、DEVICE_KEY、SRP_A、PASSWORD_CLAIM_SIGNATURE、PASSWORD_CLAIM_SECRET_BLOCK等
    • 检查参数名的大小写是否完全匹配Cognito的要求(如参数名需严格符合AWS API的规范)

推荐工具库

  • AWS Amplify Java Library:官方提供的高层封装库,已内置Cognito设备认证的完整流程,无需手动实现SRP计算和签名生成逻辑
  • cognito-srp-java:第三方轻量级库,专注于Cognito SRP认证逻辑的实现,可直接复用DEVICE_PASSWORD_VERIFIER相关的签名生成代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:32:23