AWS登录InvalidParameterException缺少必需参数SRP_A

时间:2017-02-22 11:20:24

标签: c++ amazon-web-services aws-sdk aws-cognito aws-sdk-cpp

我想将该语句应用于cpp:

我试图采用它cpp。我可以注册操作。当我尝试登录时,遇到了异常: “InvalidParameterException:缺少必需参数SRP_A”

这是我的代码的一部分:

    Aws::Map<Aws::String, Aws::String> authParameters;

   Aws::Map<Aws::String, Aws::String> authParameters;
    authParameters.insert(
        std::pair<Aws::String, Aws::String>("USERNAME", "xxxxx"));
    authParameters.insert(
        std::pair<Aws::String, Aws::String>("PASSWORD", "xxxxx"));

    InitiateAuthRequest initiateAuthRequest;
    initiateAuthRequest.SetAuthFlow(
        Aws::CognitoIdentityProvider::Model::AuthFlowType::USER_SRP_AUTH);
    initiateAuthRequest.SetClientId(TEST_APP_CLIENT_ID);
    initiateAuthRequest.SetAuthParameters(authParameters);

    InitiateAuthOutcome initiateAuthOutcome =
        client.InitiateAuth(initiateAuthRequest);
    if (initiateAuthOutcome.IsSuccess()) {
        qDebug() << "Initiate auth: " << initiateAuthOutcome.IsSuccess();
    } else {
        qDebug() << initiateAuthOutcome.GetError().GetExceptionName().c_str()
                 << ": " << initiateAuthOutcome.GetError().GetMessage().c_str();
    }

如何将SRP_A属性添加到InitiateAuthRequest?对于其他平台(android,ios和js),他们的sdk就像那里有SRP_A生成器。

我该如何解决这个问题。感谢。

1 个答案:

答案 0 :(得分:2)

在许多较低级别的SDK中,您需要自己实施SRP身份验证,如果您使用的是不受信任的设备,即您无法在其上存储完整的IAM凭据,因此无法使用Admin *功能。

wrote a blogpost about adding SRP in the AWS C# SDK应该为您提供一个很好的起点,让您了解流程涉及的内容以及您需要采取哪些步骤来进行数学计算。移植到C ++应该不会太难,你只需要散列库,比如openssl / hmac。

这里的第一个问题是你需要发送一个SRP_A值,但仅此一项并不能解决你的问题,因为你只会返回一个SRP质询,所以我推荐你到我的帖子,整个过程SRP流程。

如果您在受信任的环境中,即您在自己的服务器上运行C ++代码只有您可以访问,没有您的客户,并且您没有发送您的c ++代码给任何人,然后您可以使用AdminInitiateAuth方法和ADMIN_NO_SRP_AUTH身份验证方法(您必须在为池创建新的客户端ID /密码ID时启用它,这允许您只发送用户名和密码纯文本。