2017-02-22 99 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中,如果您使用的是不受信任的設備,即無法在其上存儲完整的IAM憑證,並且因此無法使用Admin *功能,則需要自行實施SRP auth。

wrote a blogpost about adding SRP in the AWS C# SDK這應該給你一個很好的起點,說明過程涉及到什麼以及你需要採取哪些步驟來完成數學。把它移植到C++應該不是太難,你只需要散列庫,如openssl/hmac。

這裏你的第一個問題是你需要發送一個SRP_A值,但這不能解決你的問題,因爲你只會得到一個返回的SRP挑戰,所以我將你引用到我的帖子中,整個SRP過程。

如果你是一個值得信賴的環境,雖然,也就是你自己的服務器上運行你的C++代碼,只有你訪問,沒有你的客戶,你不發貨你的C++代碼,任何人,那麼您可以使用帶有ADMIN_NO_SRP_AUTH驗證方法的AdminInitiateAuth方法(當您爲您的池創建新的客戶端ID /祕密標識時,您必須啓用該方法,該方法允許您以純文本發送用戶名和密碼

相關問題