AWS Cognito IntitiateAuth:缺少必需参数UserName

Ark*_*kon 5 authentication single-responsibility-principle amazon-web-services amazon-cognito aws-sdk

在将身份验证初始化为AWS Cognito时,API拒绝了我的请求:

InvalidParameterException: Missing required parameter UserName
status code: 400,
Run Code Online (Sandbox Code Playgroud)

这是请求的内容(是的,我尝试将它放在任何地方,没有成功).

params := &cognitoidentityprovider.InitiateAuthInput{
    AuthFlow: aws.String("USER_SRP_AUTH"),              // Required
    ClientId: aws.String("xxxxxxxxxxxxxxxx"), // Required
    AuthParameters: map[string]*string{
        "username":     aws.String("myUser"), // Required
        "UserName":     aws.String("myUser"), // Required
    },
    ClientMetadata: map[string]*string{
        "username":     aws.String("myUser"), // Required
        "UserName":     aws.String("myUser"), // Required
    },
}
Run Code Online (Sandbox Code Playgroud)

请问有什么问题吗?考虑到doc(https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-dg-pdf.pdf),username应该与AuthParameters一起使用srpA.该问题是否可能来自srpA?如果是这样,这是什么?它看起来像是密码.

Jef*_*ley 6

它应该在 AuthParameters 中,而不是 ClientMetadata。

我相信预期值是 USERNAME 和 SRP_A。

  • 非常感谢,你说得对!但是对于 SRP_A,我认为它指的是密码。当我输入初始密码时,我收到:`InvalidParameterException:检测到 1 个验证错误:'a' 处的值 'toto123456' 未能满足约束:成员必须满足正则表达式模式:^[0-9a-fA-F]+ $` 当我输入一些与表达式匹配的字符串时,我当然会得到: `InvalidParameterException: Invalid input given` 请问 SRP_A 值究竟是什么?文档没有提到它。谢谢! (10认同)

Ion*_*ian 6

SRP_A是安全远程密码协议定义的大整数.您是尝试执行SRP还是仅使用用户名和密码进行身份验证.对于用户名/密码身份验证,您应该使用AdminInitiateAuth操作.

  • 我不认为这是使用AdminInitiateAuth从移动应用程序是一个好主意.在这种情况下,是的,您需要从您的移动应用程序实施SRP.目前,我们提供用于执行SRP计算的Android,iOS和Javascript的SDK.一个Javascript实现的例子可以在我们的SDK中找到:https://github.com/aws/amazon-cognito-identity-js/ (4认同)
  • 管理员操作是安全的后端服务器,以避免SRP计算apparantly.你认为在客户端(移动应用程序)使用它是一个好主意吗?如果没有,这是否意味着我必须在客户端实施所有SRP计算?我希望Cognito API使用证书,这样我就可以通过TLS以纯文本形式发送密码. (2认同)