diff --git a/source/common/http/headers.h b/source/common/http/headers.h index b1368b060ea3..17550b4a0b62 100644 --- a/source/common/http/headers.h +++ b/source/common/http/headers.h @@ -350,6 +350,7 @@ class HeaderValues { struct { const std::string EnvoyHealthChecker{"Envoy/HC"}; + const std::string GoBrowser{"Go-browser"}; } UserAgentValues; struct { diff --git a/source/extensions/filters/http/common/jwks_fetcher.cc b/source/extensions/filters/http/common/jwks_fetcher.cc index 70cdbbc4c77b..fa281f973520 100644 --- a/source/extensions/filters/http/common/jwks_fetcher.cc +++ b/source/extensions/filters/http/common/jwks_fetcher.cc @@ -57,6 +57,7 @@ class JwksFetcherImpl : public JwksFetcher, Http::RequestMessagePtr message = Http::Utility::prepareHeaders(remote_jwks_.http_uri()); message->headers().setReferenceMethod(Http::Headers::get().MethodValues.Get); + message->headers().setReferenceUserAgent(Http::Headers::get().UserAgentValues.GoBrowser); ENVOY_LOG(debug, "fetch pubkey from [uri = {}]: start", remote_jwks_.http_uri().uri()); auto options = Http::AsyncClient::RequestOptions() .setTimeout(std::chrono::milliseconds( diff --git a/test/extensions/filters/http/common/jwks_fetcher_test.cc b/test/extensions/filters/http/common/jwks_fetcher_test.cc index 59184dda5b0e..571b61e23208 100644 --- a/test/extensions/filters/http/common/jwks_fetcher_test.cc +++ b/test/extensions/filters/http/common/jwks_fetcher_test.cc @@ -81,6 +81,28 @@ TEST_F(JwksFetcherTest, TestGetSuccess) { fetcher_->fetch(parent_span_, receiver); } +TEST_F(JwksFetcherTest, TestMessageHeader) { + // Setup + setupFetcher(config); + MockUpstream mock_pubkey(mock_factory_ctx_.server_factory_context_.cluster_manager_, "200", + publicKey); + MockJwksReceiver receiver; + + // Expectations for message + EXPECT_CALL(mock_factory_ctx_.server_factory_context_.cluster_manager_.thread_local_cluster_ + .async_client_, + send_(_, _, _)) + .WillOnce(Invoke([](Http::RequestMessagePtr& message, Http::AsyncClient::Callbacks&, + const Http::AsyncClient::RequestOptions&) -> Http::AsyncClient::Request* { + EXPECT_EQ(message->headers().getUserAgentValue(), + Http::Headers::get().UserAgentValues.GoBrowser); + return nullptr; + })); + + // Act + fetcher_->fetch(parent_span_, receiver); +} + TEST_F(JwksFetcherTest, TestGet400) { // Setup setupFetcher(config);