-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed
Description
Hello,
I'm working on Windows 7 x64, the library was built with Visual Studio 2013.
Trying to implement cognito sync client, but I'm getting an error "The request signature we calculated does not match the signature you provided" for ListDatasets method.
For comparison I added dynamoDb client and executed GetItem with same credentials. To my surprise it was completed successfully and there was no such signature error. But both, seems, use the same AWSAuthSigner class.
bool cognitoTest()
{
Aws::Utils::Logging::InitializeAWSLogging(Aws::MakeShared<Aws::Utils::Logging::DefaultLogSystem>(ALLOCATION_TAG, Aws::Utils::Logging::LogLevel::Trace, "aws_sdk_"));
ClientConfiguration config;
config.connectTimeoutMs = 30000;
config.requestTimeoutMs = 30000;
config.scheme = Scheme::HTTPS;
config.region = Region::US_EAST_1;
auto credentialsProvider = Aws::MakeShared<ProfileConfigFileAWSCredentialsProvider>(ALLOCATION_TAG, credentialsProfileName);
auto identityClient = Aws::MakeUnique<CognitoIdentityClient>(ALLOCATION_TAG, credentialsProvider, config);
// Grab an id from the pool
GetIdRequest getIdRequest;
getIdRequest.SetAccountId(ProfileConfigFileAWSCredentialsProvider::GetAccountIdForProfile(credentialsProfileName));
getIdRequest.SetIdentityPoolId(identityPoolId);
GetIdOutcome getIdOutcome = identityClient->GetId(getIdRequest);
if(!getIdOutcome.IsSuccess())
{
AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Failed to allocate identity: " << getIdOutcome.GetError().GetMessage() << "(" << getIdOutcome.GetError().GetExceptionName() << ")" );
return false;
}
Aws::String identityId = getIdOutcome.GetResult().GetIdentityId();
// Make some credentials from the id
GetCredentialsForIdentityRequest getCredsRequest;
getCredsRequest.SetIdentityId(identityId);
GetCredentialsForIdentityOutcome getCredsOutcome = identityClient->GetCredentialsForIdentity(getCredsRequest);
if(!getCredsOutcome.IsSuccess())
{
AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Failed to obtain identity credentials: " << getCredsOutcome.GetError().GetMessage() << "(" << getCredsOutcome.GetError().GetExceptionName() << ")" );
return false;
}
const Credentials& cognitoCredentials = getCredsOutcome.GetResult().GetCredentials();
auto cognitoIdCredentialsProvider = Aws::MakeShared<SimpleAWSCredentialsProvider>(ALLOCATION_TAG,
cognitoCredentials.GetAccessKeyId(),
cognitoCredentials.GetSecretKey(),
cognitoCredentials.GetSessionToken());
auto dynamoClient = Aws::MakeUnique<DynamoDBClient>(ALLOCATION_TAG, cognitoIdCredentialsProvider, config);
// Get item (dynamoDB)
GetItemRequest getItemRequest;
getItemRequest.SetTableName("PlayerData");
AttributeValue keyAttribute;
keyAttribute.SetS(identityId);
getItemRequest.AddKey("Identity", keyAttribute);
GetItemOutcome outcome = dynamoClient->GetItem(getItemRequest);
if(!outcome.IsSuccess())
{
const AWSError<DynamoDBErrors> error = outcome.GetError();
AWS_LOGSTREAM_INFO(ALLOCATION_TAG, "ERROR, code:" << error.GetMessage().c_str() << "(" << error.GetExceptionName() << ")");
return false;
}
// List datasets (cognito sync)
auto syncClient = Aws::MakeUnique<CognitoSyncClient>(ALLOCATION_TAG, cognitoIdCredentialsProvider, config);
ListDatasetsRequest listDatasetsRequest;
listDatasetsRequest.SetIdentityPoolId(identityPoolId);
listDatasetsRequest.SetIdentityId(identityId);
ListDatasetsOutcome listOutcome = syncClient->ListDatasets(listDatasetsRequest);
if(!listOutcome.IsSuccess())
{
AWS_LOGSTREAM_ERROR(ALLOCATION_TAG, "Failed to list datasets: " << listOutcome.GetError().GetMessage() << "(" << listOutcome.GetError().GetExceptionName() << ")" );
return false;
}
Aws::Utils::Logging::ShutdownAWSLogging();
return true;
}
Metadata
Metadata
Assignees
Labels
No labels