AWS SDK for C++

AWS SDK for C++ Version 1.11.848

Loading...
Searching...
No Matches
AwsBearerTokenIdentityResolver.h
1
5#pragma once
6
7#include <aws/core/auth/bearer-token-provider/AWSBearerTokenProviderBase.h>
8#include <aws/core/auth/bearer-token-provider/DefaultBearerTokenProviderChain.h>
9#include <aws/core/auth/bearer-token-provider/SSOBearerTokenProvider.h>
10#include <aws/core/auth/signer-provider/BearerTokenAuthSignerProvider.h>
11#include <aws/core/auth/signer/AWSAuthBearerSigner.h>
12#include <smithy/identity/identity/AwsBearerTokenIdentity.h>
13#include <smithy/identity/resolver/AwsIdentityResolverBase.h>
14#include <aws/core/platform/Environment.h>
15#include <aws/core/auth/bearer-token-provider/StaticBearerTokenProvider.h>
16
17namespace smithy
18{
19
21 : public IdentityResolverBase<AwsBearerTokenIdentityBase>
22{
23 public:
26
28
30 const Aws::Vector<
31 std::shared_ptr<Aws::Auth::AWSBearerTokenProviderBase>>
32 &providerChain)
33 : m_providerChainLegacy{providerChain}
34 {
35 }
36
38 const std::shared_ptr<Aws::Auth::AWSBearerTokenProviderBase>
39 &provider)
40 : m_providerChainLegacy{provider}
41 {
42 }
43
46 auto signer = bearerTokenProvider.GetSigner(Aws::Auth::BEARER_SIGNER);
48 if (signer) {
49 //since signer enum is mapped to legacy AWSAuthBearerSigner, static cast is safe here and is needed
50 providerChain.emplace_back((static_cast<Aws::Client::AWSAuthBearerSigner*>(signer.get()))->BearerTokenProvider());
51 }
52 return providerChain;
53 }()}
54 {
55
56 }
57
58 ResolveIdentityFutureOutcome
59 virtual getIdentity(const IdentityProperties &identityProperties,
60 const AdditionalParameters &additionalParameters) override
61 {
62 AWS_UNREFERENCED_PARAM(identityProperties);
63 AWS_UNREFERENCED_PARAM(additionalParameters);
64 for (auto &bearerTokenProvider : m_providerChainLegacy)
65 {
66 if (!bearerTokenProvider)
67 {
68 AWS_LOGSTREAM_FATAL(
69 "BearerTokenProvider",
70 "Unexpected nullptr in "
71 "DefaultBearerTokenProviderChain::m_providerChain");
74 "Unexpected nullptr in "
75 "BearerTokenProviderChain::m_providerChain",
76 false);
77 }
78 auto bearerToken = bearerTokenProvider->GetAWSBearerToken();
79 if (!bearerToken.IsExpiredOrEmpty())
80 {
81 auto outcomePtr = Aws::MakeUnique<AwsBearerTokenIdentity>(
82 "BearerTokenProvider");
83 outcomePtr->token() = bearerToken.GetToken();
84 outcomePtr->expiration() = bearerToken.GetExpiration();
85 return ResolveIdentityFutureOutcome(std::move(outcomePtr));
86 }
87 }
88
91 "No bearer token provider in chain found", false);
92 }
93
95 std::shared_ptr<Aws::Auth::AWSBearerTokenProviderBase> provider)
96 {
97 m_providerChainLegacy.emplace_back(std::move(provider));
98 }
99
100 protected:
103};
104
107{
108 public:
111
113 : AwsBearerTokenIdentityResolver(Aws::Vector<std::shared_ptr<Aws::Auth::AWSBearerTokenProviderBase>>{
114 Aws::MakeShared<Aws::Auth::SSOBearerTokenProvider>("SSOBearerTokenProvider")}){};
115
117 : AwsBearerTokenIdentityResolver(Aws::Vector<std::shared_ptr<Aws::Auth::AWSBearerTokenProviderBase>>{
118 Aws::MakeShared<Aws::Auth::SSOBearerTokenProvider>("SSOBearerTokenProvider", config.profile)}){};
119};
120
121} // namespace smithy
std::shared_ptr< Aws::Client::AWSAuthSigner > GetSigner(const Aws::String &signerName) const override
virtual ~AwsBearerTokenIdentityResolver()=default
void AddBearerTokenProvider(std::shared_ptr< Aws::Auth::AWSBearerTokenProviderBase > provider)
AwsBearerTokenIdentityResolver(const Aws::Auth::BearerTokenAuthSignerProvider &bearerTokenProvider)
Aws::Vector< std::shared_ptr< Aws::Auth::AWSBearerTokenProviderBase > > m_providerChainLegacy
AwsBearerTokenIdentityResolver(const Aws::Vector< std::shared_ptr< Aws::Auth::AWSBearerTokenProviderBase > > &providerChain)
virtual ResolveIdentityFutureOutcome getIdentity(const IdentityProperties &identityProperties, const AdditionalParameters &additionalParameters) override
AwsBearerTokenIdentityResolver(const std::shared_ptr< Aws::Auth::AWSBearerTokenProviderBase > &provider)
DefaultAwsBearerTokenIdentityResolver(const Aws::Client::ClientConfiguration::CredentialProviderConfiguration &config)
Aws::UnorderedMap< Aws::String, Aws::Crt::Variant< Aws::String, bool > > AdditionalParameters
Aws::UnorderedMap< Aws::String, Aws::Crt::Variant< Aws::String, bool > > IdentityProperties
AWS_CORE_API const char BEARER_SIGNER[]
std::vector< T, Aws::Allocator< T > > Vector
Definition AWSVector.h:17