【发布时间】:2017-11-04 09:06:27
【问题描述】:
我正在使用 AWS C++ SDK 在 Windows 中编写 C++ 应用程序,并且需要开发人员身份验证方面的帮助,以便在我的应用程序中向 S3 上传/下载文件。
我们有一个使用 Cognito 的后端应用程序来获取 AWS 的临时凭证(IdentityID 和 OpenIDToken)。我知道 ProviderName 和 IdentityPoolID。
与其描述我的尝试,我相信它更容易展示。
下面是sn-p。我正在尝试做与 C# 和 Java SDK 中可用的“刷新身份”等效的操作。 C# 和 Java 都使用“RefreshIdentity”,它定义了一个 IdentityState(IdentityID, ProviderName, OpenIDToken, fromCacheFlag)
根据我找到的一些文档,我创建了一个派生自 CognitoIdentityClient 的新类 (MyInheritedCognitoIdentityClient),它覆盖 GetId 和 GetOpenIdToken 函数以返回从服务器应用程序接收回的 IdentityID 和 openIdToken。调用 GetID,但未调用 GetOpenIdToken - 正如文档所暗示的那样;而是调用 GetCredentialsForIdentity(失败并出现 NotAuthorizedException)。
下面是我的代码 sn-p:
`{
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 */
}`
【问题讨论】:
标签: c++ amazon-s3 aws-sdk amazon-cognito aws-cognito