我想将该语句应用于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生成器。
我该如何解决这个问题。感谢。
答案 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时启用它,这允许您只发送用户名和密码纯文本。