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

本地Moto Server结合Cognito-IDP与AWSSRP认证报错求助

Moto Server中使用AWSSRP完成Cognito SRP认证的解决方案

问题背景

搭建本地Moto Server后,通过admin_create_user和admin_set_user_password成功创建并配置了Cognito用户,非SRP方式(如admin_initiate_auth使用USER_PASSWORD_AUTH流程)可正常认证,但使用warrant库的AWSSRP进行SRP认证时,抛出UserNotFoundException错误,提示用户不存在。

问题原因

Moto对Cognito SRP认证的实现与AWS原生服务存在细节差异:AWS原生Cognito在调用admin_set_user_password时,会自动生成SRP认证所需的salt和password_verifier用户属性,但Moto并未实现这一自动生成逻辑,导致AWSSRP在执行认证流程时无法找到用户的SRP相关参数,进而触发用户不存在的错误。

解决方案

手动生成用户的SRP盐和验证密钥,并更新到用户属性中,具体步骤如下:

1. 在用户创建代码中添加SRP属性生成与更新

修改create_user.py,在admin_set_user_password之后添加以下代码,生成并设置SRP所需的用户属性:

from warrant.aws_srp import AWSSRP

# 初始化AWSSRP实例以生成SRP参数
aws_srp_generator = AWSSRP(
    username=cognito_user_name,
    password=cognito_user_password,
    pool_id=cl_pool_id,
    client_id=cl_client_id,
    client=cognito_client
)

# 生成SRP盐和验证密钥
srp_salt = aws_srp_generator.get_salt()
password_verifier = aws_srp_generator.get_password_verifier()

# 更新用户属性,添加SRP相关参数
update_srp_attrs = cognito_client.admin_update_user_attributes(
    UserPoolId=cl_pool_id,
    Username=cognito_user_name,
    UserAttributes=[
        {'Name': 'salt', 'Value': srp_salt},
        {'Name': 'password_verifier', 'Value': password_verifier}
    ]
)
print(f"SRP属性更新结果:{update_srp_attrs}")

2. 确认User Pool Client的认证流程配置

确保User Pool Client的ExplicitAuthFlows包含ALLOW_USER_SRP_AUTH(你的代码中已配置,可忽略此步):

ExplicitAuthFlows=[
    'ALLOW_ADMIN_USER_PASSWORD_AUTH',
    'ALLOW_USER_PASSWORD_AUTH',
    'ALLOW_USER_SRP_AUTH',
    'ALLOW_REFRESH_TOKEN_AUTH',
],

3. 重新执行认证流程

修改完成后,重新运行create_user.py创建用户,再执行get_token.py即可通过AWSSRP完成SRP认证,成功获取令牌。

验证说明

添加SRP属性后,Moto的Cognito服务在处理RespondToAuthChallenge请求时,就能找到用户对应的SRP参数,从而完成SRP认证流程,解决UserNotFoundException错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:25:57