是否可以为 Kafka 提供自定义登录模块以支持 LDAP



Kafka可以配置为使用多种身份验证机制:纯文本用户名/密码,Kerberos或SSL。 前 2 个使用 SASL,其中需要 JAAS 配置文件。

对于纯文本身份验证方法,配置如下所示(取自文档(:

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。

是的,您可以为 Kafka 提供一个实现LoginModule的自定义类,并在其中包含所需的身份验证逻辑。

然后使用类名更新 JAAS 文件,并确保它位于类路径中。

您需要输入一些样板代码才能正确设置所有内容,但您可以使用PlainLoginModulePlainSaslServerProviderPlainSaslServerFactoryPlainSaslServer作为示例。

您的LoginModule类应具有与PlainLoginModule相同的逻辑,但改为初始化您的Provider实现(在静态块中(。

Provider类应与PlainSaslServerProvider具有相同的逻辑,但应引用SaslServerFactory实现。

您的SaslFactory类应再次具有与PlainSaslServerFactory相同的逻辑,但创建SaslServer实现的实例。

最后,您的SaslServer类应在其evaluateResponse()方法中实现必要的 LDAP 逻辑。只需确保正确设置this.authorizationId,因为这将成为用户主体并将complete设置为true(就像PlainSaslServer.evaluateResponse()一样(

最新更新