在C ++中使用DeveloperCredentials for AWS S3 Client

时间:2017-06-02 21:25:50

标签: c++ amazon-s3 aws-sdk amazon-cognito aws-cognito

我正在使用AWS C ++ SDK在Windows中编写C ++应用程序,并需要有关Developer Authenticated Identities的帮助,以便在我的应用程序中上传/下载S3中的文件。

我们有一个使用Cognito的后端应用程序来获取AWS的临时凭证(IdentityID& OpenIDToken)。我知道ProviderName和IdentityPoolID。 而不是描述我尝试过的东西,我相信它更容易展示 以下是片段。我试图做相当于C#和Java SDK中提供的“刷新身份”。 C#和Java都使用“RefreshIdentity”来定义IdentityState(IdentityID,ProviderName,OpenIDToken,fromCacheFlag)

根据我发现的一些文档,我创建了一个从CognitoIdentityClient派生的新类(MyInheritedCognitoIdentityClient),它覆盖了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 */

}`

1 个答案:

答案 0 :(得分:0)

您需要致电GetCredentialsForIdentity服务器端,如果没有人可以登录您自己创建的提供商(我假设login.mycompany.net是自定义提供商)