Skip to content

Commit c735bb6

Browse files
committed
Fix OauthValidatorCallbackHandler failure caused by apache/pulsar#19295
1 parent 3acb194 commit c735bb6

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

kafka-impl/src/main/java/io/streamnative/pulsar/handlers/kop/security/oauth/OauthValidatorCallbackHandler.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
import java.util.Map;
2222
import java.util.Objects;
2323
import java.util.Set;
24+
import java.util.concurrent.ExecutionException;
25+
import java.util.concurrent.TimeUnit;
26+
import java.util.concurrent.TimeoutException;
2427
import javax.naming.AuthenticationException;
2528
import javax.security.auth.callback.Callback;
2629
import javax.security.auth.callback.UnsupportedCallbackException;
@@ -126,8 +129,11 @@ protected void handleCallback(KopOAuthBearerValidatorCallback callback) {
126129
final String tenant = tokenAndTenant.getRight();
127130

128131
try {
132+
AuthData authData = AuthData.of(token.getBytes(StandardCharsets.UTF_8));
129133
final AuthenticationState authState = authenticationProvider.newAuthState(
130-
AuthData.of(token.getBytes(StandardCharsets.UTF_8)), null, null);
134+
authData, null, null);
135+
// TODO: Use the configurable timeout
136+
authState.authenticateAsync(authData).get(10, TimeUnit.SECONDS);
131137
final String role = authState.getAuthRole();
132138
AuthenticationDataSource authDataSource = authState.getAuthDataSource();
133139
callback.token(new KopOAuthBearerToken() {
@@ -168,7 +174,7 @@ public Long startTimeMs() {
168174
return Long.MAX_VALUE;
169175
}
170176
});
171-
} catch (AuthenticationException e) {
177+
} catch (AuthenticationException | InterruptedException | ExecutionException | TimeoutException e) {
172178
log.error("OAuth validator callback handler new auth state failed: ", e);
173179
throw new OAuthBearerIllegalTokenException(OAuthBearerValidationResult.newFailure(e.getMessage()));
174180
}

0 commit comments

Comments
 (0)