diff --git a/src/envoy/http/authn/http_filter.cc b/src/envoy/http/authn/http_filter.cc index 27e14b8a088..6889ae8ed66 100644 --- a/src/envoy/http/authn/http_filter.cc +++ b/src/envoy/http/authn/http_filter.cc @@ -52,16 +52,16 @@ FilterHeadersStatus AuthenticationFilter::decodeHeaders(HeaderMap& headers, Payload payload; - if (!filter_config_.policy().peer_is_optional() && - !createPeerAuthenticator(filter_context_.get())->run(&payload)) { + if (!createPeerAuthenticator(filter_context_.get())->run(&payload) && + !filter_config_.policy().peer_is_optional()) { rejectRequest("Peer authentication failed."); removeJwtPayloadFromHeaders(); return FilterHeadersStatus::StopIteration; } bool success = - filter_config_.policy().origin_is_optional() || - createOriginAuthenticator(filter_context_.get())->run(&payload); + createOriginAuthenticator(filter_context_.get())->run(&payload) || + filter_config_.policy().origin_is_optional(); // After Istio authn, the JWT headers consumed by Istio authn should be // removed. diff --git a/src/envoy/http/authn/http_filter_test.cc b/src/envoy/http/authn/http_filter_test.cc index a71d60aeb56..4651d3b52f5 100644 --- a/src/envoy/http/authn/http_filter_test.cc +++ b/src/envoy/http/authn/http_filter_test.cc @@ -168,6 +168,13 @@ TEST_F(AuthenticationFilterTest, IgnoreBothFail) { *filter_config_.mutable_policy() = policy_; StrictMock filter(filter_config_); filter.setDecoderFilterCallbacks(decoder_callbacks_); + + EXPECT_CALL(filter, createPeerAuthenticator(_)) + .Times(1) + .WillOnce(Invoke(createAlwaysFailAuthenticator)); + EXPECT_CALL(filter, createOriginAuthenticator(_)) + .Times(1) + .WillOnce(Invoke(createAlwaysFailAuthenticator)); EXPECT_EQ(Http::FilterHeadersStatus::Continue, filter.decodeHeaders(request_headers_, true)); }