1

我想将该声明应用于 cpp:

我试图采用它cpp。我可以注册操作。当我尝试登录时,我遇到了这个异常:“InvalidParameterException : Missing required parameter 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 生成器。

我怎么解决这个问题。谢谢。

4

1 回答 1

2

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

写了一篇关于在 AWS C# SDK 中添加 SRP 的博文,它应该为您提供一个很好的起点,让您了解该过程涉及的内容以及您需要采取哪些步骤来进行数学运算。移植到 C++ 应该不会太难,你只需要像 openssl/hmac 这样的散列库。

您的第一个问题是您需要发送一个 SRP_A 值,但仅此一项并不能解决您的问题,因为您只会收到一个 SRP 挑战,因此我将您推荐给我的帖子,该帖子贯穿了整个 SRP 流程。

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

于 2017-02-23T21:48:25.830 回答