是否可以为Kafka提供自定义LoginModule以支持LDAP?

时间:2017-11-14 21:28:47

标签: apache-kafka ldap jaas sasl

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

对于纯文本身份验证方法,配置看起来像(取自documentation):

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

我想使用LDAP进行身份验证。我的问题是:如果我用实现LoginModule的类替换PlainLoginModule并将此类放在代理的类路径中,我可以以任何方式实现身份验证(即LDAP)吗?

我不能以合理的方式使用Kerberos,因为它在我工作的组织中定义其主体的方式,因此我希望使用LDAP,因为我需要支持RBAC。

1 个答案:

答案 0 :(得分:4)

是的,您可以向Kafka提供一个实现LoginModule的自定义类,并具有您想要的身份验证逻辑。

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

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

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

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

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

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

相关问题