Skip to content

Commit a42b10c

Browse files
Merge pull request #58 from awslabs/FB-HeaderSigning
Skip signing x-amzn-trace-id
2 parents 62c6b37 + 154651e commit a42b10c

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

aws-cpp-sdk-core/include/aws/core/auth/AWSAuthSigner.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include <aws/core/Region.h>
2121
#include <aws/core/utils/memory/AWSMemory.h>
22+
#include <aws/core/utils/memory/stl/AWSSet.h>
2223
#include <aws/core/utils/DateTime.h>
2324
#include <aws/core/utils/Array.h>
2425

@@ -130,11 +131,16 @@ namespace Aws
130131
Aws::String GenerateStringToSign(const Aws::String& dateValue, const Aws::String& simpleDate, const Aws::String& canonicalRequestHash) const;
131132
const Aws::Utils::ByteBuffer& ComputeLongLivedHash(const Aws::String& secretKey, const Aws::String& simpleDate) const;
132133

134+
bool ShouldSignHeader(const Aws::String& header) const;
135+
133136
std::shared_ptr<Auth::AWSCredentialsProvider> m_credentialsProvider;
134137
Aws::String m_serviceName;
135138
Aws::String m_region;
136139
Aws::UniquePtr<Aws::Utils::Crypto::Sha256> m_hash;
137140
Aws::UniquePtr<Aws::Utils::Crypto::Sha256HMAC> m_HMAC;
141+
142+
Aws::Set<Aws::String> m_unsignedHeaders;
143+
138144
//these next four fields are ONLY for caching purposes and do not change
139145
//the logical state of the signer. They are marked mutable so the
140146
//interface can remain const.

aws-cpp-sdk-core/source/auth/AWSAuthSigner.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ AWSAuthV4Signer::AWSAuthV4Signer(const std::shared_ptr<Auth::AWSCredentialsProvi
129129
m_region(region),
130130
m_hash(Aws::MakeUnique<Aws::Utils::Crypto::Sha256>(v4LogTag)),
131131
m_HMAC(Aws::MakeUnique<Aws::Utils::Crypto::Sha256HMAC>(v4LogTag)),
132+
m_unsignedHeaders({"user-agent", "x-amzn-trace-id"}),
132133
m_signPayloads(signPayloads),
133134
m_urlEscapePath(urlEscapePath)
134135
{
@@ -141,6 +142,12 @@ AWSAuthV4Signer::~AWSAuthV4Signer()
141142
// empty destructor in .cpp file to keep from needing the implementation of (AWSCredentialsProvider, Sha256, Sha256HMAC) in the header file
142143
}
143144

145+
146+
bool AWSAuthV4Signer::ShouldSignHeader(const Aws::String& header) const
147+
{
148+
return m_unsignedHeaders.find(Aws::Utils::StringUtils::ToLower(header.c_str())) == m_unsignedHeaders.cend();
149+
}
150+
144151
bool AWSAuthV4Signer::SignRequest(Aws::Http::HttpRequest& request) const
145152
{
146153
AWSCredentials credentials = m_credentialsProvider->GetAWSCredentials();
@@ -186,8 +193,11 @@ bool AWSAuthV4Signer::SignRequest(Aws::Http::HttpRequest& request) const
186193

187194
for (const auto& header : CanonicalizeHeaders(request.GetHeaders()))
188195
{
189-
headersStream << header.first.c_str() << ":" << header.second.c_str() << NEWLINE;
190-
signedHeadersStream << header.first.c_str() << ";";
196+
if(ShouldSignHeader(header.first))
197+
{
198+
headersStream << header.first.c_str() << ":" << header.second.c_str() << NEWLINE;
199+
signedHeadersStream << header.first.c_str() << ";";
200+
}
191201
}
192202

193203
Aws::String canonicalHeadersString = headersStream.str();

0 commit comments

Comments
 (0)