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 文件,并确保它位于类路径中。
您需要输入一些样板代码才能正确设置所有内容,但您可以使用PlainLoginModule
、PlainSaslServerProvider
、PlainSaslServerFactory
和PlainSaslServer
作为示例。
您的LoginModule
类应具有与PlainLoginModule
相同的逻辑,但改为初始化您的Provider
实现(在静态块中(。
Provider
类应与PlainSaslServerProvider
具有相同的逻辑,但应引用SaslServerFactory
实现。
您的SaslFactory
类应再次具有与PlainSaslServerFactory
相同的逻辑,但创建SaslServer
实现的实例。
最后,您的SaslServer
类应在其evaluateResponse()
方法中实现必要的 LDAP 逻辑。只需确保正确设置this.authorizationId
,因为这将成为用户主体并将complete
设置为true
(就像PlainSaslServer.evaluateResponse()
一样(