Kafka 加载 SASL 回调处理 class 但不使用它
Kafka loading SASL callback handling class but not using it
我正在尝试将 OAUTHBEARER 实现为 SASL 机制。其中一部分是我需要覆盖服务器和登录回调处理程序 classes。我正在使用 docker 并因此通过环境变量设置它们:
KAFKA_LISTENER_NAME_OUTSIDE_OAUTHBEARER_SASL_SERVER_CALLBACK_HANDLER_CLASS=[class_name]
奇怪的是,它显然正在加载指定的 class,因为我正在 classes 的构造函数中轻松地执行 log.warn("ctor...")
。但是堆栈跟踪显示它没有调用提供的 class 的 handle
方法,而是调用 AbstractLogin$DefaultLoginHandler class:
[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)
对于加载处理程序 class 但不使用它的原因,是否有任何建议?如果我简单地删除两个 LOGIN/SERVER_CALLBACK_HANDLER_CLASS 的环境变量,相同的异常但没有 WARN 证明 class 已加载。我无法真正调和的一种可能性是堆栈跟踪似乎引用了 LoginCallbackHandler 但调用的 class 是 Server/ValidatorCallbackHandler;就好像它无法加载登录回调处理程序而只能加载验证器回调处理程序一样,但我仔细检查了 a) 环境变量属于正确的 class 名称 (login==Login && server==验证器)并且 class 名称确实正确。
当我 post 到 Whosebug 时发生了一些事情,答案神奇地显现出来。
我还需要为其他侦听器包含 SASL 配置:
KAFKA_LISTENER_NAME_INSIDE_PLAIN_SASL_JAAS_CONFIG="org.apache..."
然后它适用于 INSIDE://PLAIN 和 OUTSIDE://OAUTHBEARER。
我正在尝试将 OAUTHBEARER 实现为 SASL 机制。其中一部分是我需要覆盖服务器和登录回调处理程序 classes。我正在使用 docker 并因此通过环境变量设置它们:
KAFKA_LISTENER_NAME_OUTSIDE_OAUTHBEARER_SASL_SERVER_CALLBACK_HANDLER_CLASS=[class_name]
奇怪的是,它显然正在加载指定的 class,因为我正在 classes 的构造函数中轻松地执行 log.warn("ctor...")
。但是堆栈跟踪显示它没有调用提供的 class 的 handle
方法,而是调用 AbstractLogin$DefaultLoginHandler class:
[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)
对于加载处理程序 class 但不使用它的原因,是否有任何建议?如果我简单地删除两个 LOGIN/SERVER_CALLBACK_HANDLER_CLASS 的环境变量,相同的异常但没有 WARN 证明 class 已加载。我无法真正调和的一种可能性是堆栈跟踪似乎引用了 LoginCallbackHandler 但调用的 class 是 Server/ValidatorCallbackHandler;就好像它无法加载登录回调处理程序而只能加载验证器回调处理程序一样,但我仔细检查了 a) 环境变量属于正确的 class 名称 (login==Login && server==验证器)并且 class 名称确实正确。
当我 post 到 Whosebug 时发生了一些事情,答案神奇地显现出来。
我还需要为其他侦听器包含 SASL 配置:
KAFKA_LISTENER_NAME_INSIDE_PLAIN_SASL_JAAS_CONFIG="org.apache..."
然后它适用于 INSIDE://PLAIN 和 OUTSIDE://OAUTHBEARER。