Skip to content

Commit c55c7c3

Browse files
wmedvedericardozanini
authored andcommitted
issue-1182: Token propagation throws java.lang.UnsupportedOperationException when adding the token to the request header parameters (quarkiverse#1184) (quarkiverse#1189)
* issue-1182: Token propagation throws java.lang.UnsupportedOperationException when adding the token to the request header parameters * Review comments 1 * Review comments 2 (cherry picked from commit c6e504a)
1 parent 3ebe6f2 commit c55c7c3

File tree

4 files changed

+28
-15
lines changed

4 files changed

+28
-15
lines changed

client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.List;
77

88
import jakarta.ws.rs.client.ClientRequestContext;
9-
import jakarta.ws.rs.core.HttpHeaders;
109

1110
import org.slf4j.Logger;
1211
import org.slf4j.LoggerFactory;
@@ -46,10 +45,14 @@ public void filter(ClientRequestContext requestContext) throws IOException {
4645
.build());
4746
}
4847

49-
if (bearerToken != null && !bearerToken.isBlank()) {
50-
requestContext.getHeaders().remove(HttpHeaders.AUTHORIZATION);
51-
requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION,
48+
if (!isEmptyOrBlank(bearerToken)) {
49+
addAuthorizationHeader(requestContext.getHeaders(),
5250
AuthUtils.authTokenOrBearer("Bearer", AbstractAuthProvider.sanitizeBearerToken(bearerToken)));
51+
} else {
52+
LOGGER.debug("No bearer token was found for the oauth2 security scheme: {}." +
53+
" You must verify that a Quarkus OIDC Client with the name: {} is properly configured," +
54+
" or the request header: {} is set when the token propagation is enabled.",
55+
getName(), getName(), getHeaderForPropagation(getOpenApiSpecId(), getName()));
5356
}
5457
}
5558

client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
import static io.quarkiverse.openapi.generator.providers.AbstractAuthenticationPropagationHeadersFactory.propagationHeaderName;
55

66
import java.util.ArrayList;
7+
import java.util.Collections;
78
import java.util.List;
89
import java.util.Objects;
910

11+
import io.vertx.codegen.doc.Token;
1012
import jakarta.ws.rs.core.HttpHeaders;
1113
import jakarta.ws.rs.core.MultivaluedMap;
1214

@@ -64,17 +66,21 @@ public boolean isTokenPropagation() {
6466
}
6567

6668
public static String getTokenForPropagation(MultivaluedMap<String, Object> httpHeaders, String openApiSpecId,
67-
String authName) {
68-
String headerName = getHeaderName(openApiSpecId, authName) != null ? getHeaderName(openApiSpecId, authName)
69-
: HttpHeaders.AUTHORIZATION;
69+
String authName) {
70+
String headerName = getHeaderForPropagation(openApiSpecId, authName);
7071
String propagatedHeaderName = propagationHeaderName(openApiSpecId, authName, headerName);
71-
return Objects.toString(httpHeaders.getFirst(propagatedHeaderName));
72+
return Objects.toString(httpHeaders.getFirst(propagatedHeaderName), null);
7273
}
7374

7475
public String getTokenForPropagation(MultivaluedMap<String, Object> httpHeaders) {
7576
return getTokenForPropagation(httpHeaders, getOpenApiSpecId(), getName());
7677
}
7778

79+
public static String getHeaderForPropagation(String openApiSpecId, String authName) {
80+
return getHeaderName(openApiSpecId, authName) != null ? getHeaderName(openApiSpecId, authName)
81+
: HttpHeaders.AUTHORIZATION;
82+
}
83+
7884
public String getHeaderName() {
7985
return ConfigProvider.getConfig()
8086
.getOptionalValue(getCanonicalAuthConfigPropertyName(AuthConfig.HEADER_NAME), String.class).orElse(null);
@@ -110,4 +116,13 @@ public static boolean isTokenPropagation(String openApiSpecId, String authName)
110116
public CredentialsProvider getCredentialsProvider() {
111117
return credentialsProvider;
112118
}
119+
120+
121+
protected void addAuthorizationHeader(MultivaluedMap<String, Object> headers, String value) {
122+
headers.put(HttpHeaders.AUTHORIZATION, Collections.singletonList(value));
123+
}
124+
125+
protected static boolean isEmptyOrBlank(String value) {
126+
return value == null || value.isBlank();
127+
}
113128
}

client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BasicAuthenticationProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public void filter(ClientRequestContext requestContext) throws IOException {
5757
" You must verify that the properties: {} and {} are properly configured, or the request header: {} is set when the token propagation is enabled.",
5858
getName(), getCanonicalAuthConfigPropertyName(USER_NAME, getOpenApiSpecId(), getName()),
5959
getCanonicalAuthConfigPropertyName(PASSWORD, getOpenApiSpecId(), getName()),
60-
getHeaderForPropagation());
60+
getHeaderForPropagation(getOpenApiSpecId(), getName()));
6161
}
6262
}
6363
}

client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/BearerAuthenticationProvider.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,13 @@
1010
import org.slf4j.Logger;
1111
import org.slf4j.LoggerFactory;
1212

13-
import org.slf4j.Logger;
14-
import org.slf4j.LoggerFactory;
15-
1613
/**
1714
* Provides bearer token authentication or any other valid scheme.
1815
*
1916
* @see <a href="https://swagger.io/docs/specification/authentication/bearer-authentication/">Bearer Authentication</a>
2017
*/
2118
public class BearerAuthenticationProvider extends AbstractAuthProvider {
2219

23-
private static final Logger LOGGER = LoggerFactory.getLogger(BearerAuthenticationProvider.class);
24-
2520
private final String scheme;
2621
private static final Logger LOGGER = LoggerFactory.getLogger(BearerAuthenticationProvider.class);
2722

@@ -46,7 +41,7 @@ public void filter(ClientRequestContext requestContext) throws IOException {
4641
LOGGER.debug("No bearer token was found for the security scheme: {}." +
4742
" You must verify that the property: {} is properly configured, or the request header: {} is set when the token propagation is enabled.",
4843
getName(), getCanonicalAuthConfigPropertyName(BEARER_TOKEN, getOpenApiSpecId(), getName()),
49-
getHeaderForPropagation());
44+
getHeaderForPropagation(getOpenApiSpecId(), getName()));
5045
}
5146
LOGGER.debug("Header keys set in filtered requestContext: {}", requestContext.getHeaders().keySet());
5247
}

0 commit comments

Comments
 (0)