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