【问题标题】:Using DeveloperCredentials for AWS S3 Client in C++在 C++ 中为 AWS S3 客户端使用 DeveloperCredentials
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助。不过,我不确定我是否跟随。我们的服务器端应用程序(用 Java 编写)调用 GetOpenIdTokenForDeveloperIdentityRequest()(在通过我们自己的机制验证客户端的身份之后)并将 OidToken 和 IdentityiD 返回给客户端。我没有故意在客户端调用 GetCredentialsForIdentity;从 S3Client 构造函数中调用它。
    • 我可能为 S3Client 使用了错误的构造函数;我之所以走这条路是因为它是我看到的唯一使用 OpenTokenID 和 IdentityId 的东西。
    • s3 c++ sdk 文档说要使用您创建 s3client 对象的方式...您的 cognito_auth_role 有权访问 s3 对吗?
    • 当行:Aws::S3::S3Client s3Client(cognitoCachCredProvider);被调用,我看到 GetCredentialsForIdentity 得到 NotAuthorizedException。在此之后,任何后续调用: s3Client.ListObjects() 和 s3client.PutObject() 都会失败并出现相同的错误。是否需要设置任何标志或告诉客户端我正在尝试使用 openIdToken 或 developerAuthenticatedIdentity?
    • 为了回答您之前的问题,我绝对应该可以访问 s3。我有一个 C# 应用程序正在执行我想在 C++ 中执行的操作,但我只是不知道如何使用从服务器应用程序返回的 openID 令牌。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2013-11-15
    • 2019-03-04
    相关资源
    最近更新 更多