kafka是否可以提供自定义loginmodule来支持ldap?

ct2axkht  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(394)

kafka可以配置为使用几种身份验证机制:明文用户名/密码、kerberos或ssl。前2个使用sasl,其中需要jaas配置文件。
对于纯文本auth方法,配置如下(取自文档):

KafkaServer {
   org.apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin-secret"
   user_admin="admin-secret"
   user_alice="alice-secret";
};

如果可能的话,我想使用ldap进行身份验证。我的问题是:如果我替换 PlainLoginModule 有了一个实现loginmodule的类,并将这个类放在代理的类路径中,我可以以任何我希望的方式实现身份验证(即ldap)吗?
我不能以合理的方式使用kerberos,因为它的主体是在我工作的组织中定义的,因此我希望使用ldap来支持rbac。

qxsslcnc

qxsslcnc1#

是的,您可以为kafka提供一个实现 LoginModule 并且有你想要的认证逻辑。
然后用类名更新jaas文件,并确保它位于类路径中。
您将需要放置一些样板代码来正确设置所有内容,但您可以使用 PlainLoginModule , PlainSaslServerProvider , PlainSaslServerFactory 以及 PlainSaslServer 作为例子。
你的 LoginModule 类的逻辑应该与 PlainLoginModule 而是初始化你的 Provider 实现(在静态块中)。
你的 Provider 类的逻辑应该与 PlainSaslServerProvider 但是你可以参考你的 SaslServerFactory 实施。
你的 SaslFactory 类的逻辑应该与 PlainSaslServerFactory 但是创建一个 SaslServer 实施。
最后你的 SaslServer 类应该在其 evaluateResponse() 方法。一定要正确设置 this.authorizationId 因为这将成为用户主体和集合 completetrue (就像 PlainSaslServer.evaluateResponse() 是的)

相关问题