Я пишу приложение на C ++ в Windows, используя AWS C ++ SDK, и мне нужна помощь с идентификационными данными разработчика, чтобы загружать / скачивать файлы в / из S3 в моем приложении.
У нас есть серверное приложение, использующее Cognito для получения временных учетных данных для AWS (IdentityID & OpenIDToken). Я знаю имя провайдера и идентификатор удостоверения личности.
Вместо того, чтобы описать то, что я пытался, я считаю, что это легче показать.
Ниже приведен фрагмент. Я пытаюсь сделать эквивалент «Обновить личность», который доступен в C # и Java SDK. C # и Java оба используют «RefreshIdentity», который определяет IdentityState (IdentityID, ProviderName, OpenIDToken, fromCacheFlag)
Основываясь на найденной мной документации, я создал новый класс (MyInheritedCognitoIdentityClient), производный от CognitoIdentityClient, который переопределяет GetId & Функции GetOpenIdToken возвращают IdentityID и openIdToken, полученные от серверного приложения. GetID вызывается, но GetOpenIdToken не вызывается — как следует из документации; вместо этого есть вызов GetCredentialsForIdentity (который завершается с NotAuthorizedException).
Ниже приведен мой фрагмент кода:
`{
std::shared_ptr<MyInheritedPersistentCognitoIdentityProvider> identityProvider = std::make_shared<MyInheritedPersistentCognitoIdentityProvider>();
identityProvider->setIdentityPool(myIdentityPoolID); // us-east-1:c373a2ca-b912-3839-a65c-8d4ce53d512e -> not real
identityProvider->setAccountId(myProviderName); // login.mycompany.net
std::shared_ptr<MyInheritedCognitoIdentityClient> cognitoIdentityClient =
std::make_shared<MyInheritedCognitoIdentityClient>(); // _cognitoID and _openIdToken
std::shared_ptr<Aws::Auth::AWSCredentialsProvider> cognitoCachCredProvider =
std::make_shared<Aws::Auth::CognitoCachingAuthenticatedCredentialsProvider>(identityProvider, cognitoIdentityClient);
Aws::S3::S3Client s3Client(cognitoCachCredProvider);
/* attempt to upload/download here */
} `
тебе нужно позвонить GetCredentialsForIdentity
на стороне сервера, если не кто-нибудь может войти в свой собственный созданный провайдер (я предполагаю, login.mycompany.net
это пользовательский провайдер)
Других решений пока нет …