我试图实施OAUTHBEARER为SASL机制。 一部分,是我需要复盖的服务器登录回调处理类。 我使用docker和由此设置他们通过环境变量:
KAFKA_LISTENER_NAME_OUTSIDE_OAUTHBEARER_SASL_SERVER_CALLBACK_HANDLER_CLASS=[class_name]
什么是奇怪的是,它显然是装载指定的类的因为我轻而易举地做 log.warn("ctor...")
在构造上述课程。 但堆栈跟踪显示,它不打电话的 handle
方法提供类,而是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)
是否有任何建议为什么它被装载处理程序类但不是使用它吗? 如果我简单地删除这些环境变量对于这两种登录/SERVER_CALLBACK_HANDLER_CLASS,同样的例外,但没有发出警告,证明该舱装载。 一种可能性,我真的不能调和的是,堆栈跟踪似乎指LoginCallbackHandler但这类援引的是服务器/ValidatorCallbackHandler;因为如果它不能够载的登回调处理和只的验证回调处理,但我有双重检查,一)环境变量涉及到正确类名称(登录==登录和&server==验证程序),该类的名字的确是正确的。