Staram się realizować OAUTHBEARER jako mechanizm SASL. Częściowo jest to związane z tym, że muszę zastąpić klasy obsługi wywołania serwera i logowania. Używam docker i w ten sposób ustawiam je za pomocą zmiennych środowiskowych:
KAFKA_LISTENER_NAME_OUTSIDE_OAUTHBEARER_SASL_SERVER_CALLBACK_HANDLER_CLASS=[nazwa klasy]
Co dziwne, to to, że jest on wyraźnie pobiera klasa, kiedy zręcznie wykonuję log.warn("ctor...")
w konstruktorze wymienionych klas. Ale śledzenie stosu wskazuje na to, że nie powoduje handle
metoda udzielonego klasy, ale zamiast tego klasa AbstractLogin$DefaultLoginHandler:
[2021-11-23 17:41:57,137] WARN OAuthAuthenticateValidatorCallbackHandler - ctor: v1.1 (com.oauth2.security.oauthbearer.OAuthAuthenticateValidatorCallbackHandler) [2021-11-23 17:41:57,153] ERROR Unrecognized SASL Login callback (org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule) javax.security.auth.callback.UnsupportedCallbackException: Unrecognized SASL Login callback at org.apache.kafka.common.security.authenticator.AbstractLogin$DefaultLoginCallbackHandler.handle(AbstractLogin.java:105) at org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule.identifyToken(OAuthBearerLoginModule.java:316)
Czy są jakieś sugestie co do tego, dlaczego ładuje klasę obsługi, ale nie używa go? Jeśli po prostu usunę zmienne środowiskowe dla obu klas LOGIN/SERVER_CALLBACK_HANDLER_CLASS, to wyjątek, ale bez OSTRZEŻENIA, potwierdzającego, że klasa została załadowana. Jedną z możliwości, z której ja naprawdę nie mogę się pogodzić, polega na tym, że ślad stosu, wygląda na to, odwołuje się do obsługi oddzwonienia logincall, ale druga klasa to serwer/validator; jakby nie mógł pobrać obsługi oddzwonienia logowania i tylko obsługi oddzwonienia walidator, ale ja dwa razy sprawdził, że a) zmienne środowiskowe odnoszą się do poprawnej nazwy klasy (login==Login && server==Validator) i że nazwy klas naprawdę odpowiednie.