2017-02-22 2 views
1

Я хочу подать это заявление для CPP:AWS входа в InvalidParameterException Отсутствует необходимый параметр SRP_A

Я пытался принять его 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, как есть.

Как я могу решить эту проблему. Благодарю.

ответ

2

Во многих SDK нижнего уровня вам необходимо самостоятельно реализовать авторизацию SRP, если вы находитесь на ненадежном устройстве, то есть вы не можете хранить на нем полные учетные данные IAM и, следовательно, не можете использовать функции Admin *.

I 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 (который необходимо включить, когда вы создаете новый идентификатор клиента/секретный идентификатор для вашего пула, что позволяет просто отправлять имя пользователя и пароль простым текстом.

Смежные вопросы