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。
答案 0 :(得分:4)
是的,您可以向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()
那样)