【发布时间】:2022-01-02 05:15:39
【问题描述】:
我正在尝试将 OAUTHBEARER 实现为 SASL 机制。其中一部分是我需要覆盖服务器和登录回调处理程序类。我正在使用 docker,因此通过环境变量设置它们:
KAFKA_LISTENER_NAME_OUTSIDE_OUTHBEARER_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)
对于为什么加载处理程序类但不使用它有什么建议吗?如果我只是删除 LOGIN/SERVER_CALLBACK_HANDLER_CLASS 的环境变量,则相同的异常但没有 WARN 证明该类已加载。我无法真正接受的一种可能性是堆栈跟踪似乎引用了 LoginCallbackHandler 但调用的类是 Server/ValidatorCallbackHandler;好像它无法加载登录回调处理程序和只有验证器回调处理程序,但我已经仔细检查了 a) 环境变量与正确的类名 (login==Login && server==Validator) 相关,并且类名确实是正确的。
【问题讨论】:
标签: apache-kafka oauth sasl