是否可以为 Kafka 提供自定义 LoginModule 以支持 LDAP?
Can Kafka be provided with custom LoginModule to support LDAP?
Kafka 可以配置为使用多种身份验证机制:纯文本 username/password、Kerberos 或 SSL。前 2 个使用 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 的 class 替换 PlainLoginModule
并将此 class 放在代理的 class 路径中,我可以实现身份验证吗以我希望的任何方式(即 LDAP)?
我不能以合理的方式使用 Kerberos,因为它的主体是在我工作的组织中定义的,因此我希望使用 LDAP,因为我需要支持 RBAC。
是的,您可以为 Kafka 提供自定义的 class,实现 LoginModule
并在其中包含您想要的身份验证逻辑。
然后用您的 class 名称更新 JAAS 文件并确保它在 class 路径中。
您需要放置一些样板代码才能正确设置所有内容,但您可以使用 PlainLoginModule
、PlainSaslServerProvider
、PlainSaslServerFactory
和 PlainSaslServer
作为示例。
您的 LoginModule
class 应该具有与 PlainLoginModule
相同的逻辑,但是初始化您的 Provider
实现(在静态块中)。
您的 Provider
class 应具有与 PlainSaslServerProvider
相同的逻辑,但应引用您的 SaslServerFactory
实现。
您的 SaslFactory
class 应该再次具有与 PlainSaslServerFactory
相同的逻辑,但创建您的 SaslServer
实现的实例。
最后,您的 SaslServer
class 应该在其 evaluateResponse()
方法中实施必要的 LDAP 逻辑。只需确保正确设置 this.authorizationId
因为这将成为用户主体并将 complete
设置为 true
(就像 PlainSaslServer.evaluateResponse()
那样)
Kafka 可以配置为使用多种身份验证机制:纯文本 username/password、Kerberos 或 SSL。前 2 个使用 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 的 class 替换 PlainLoginModule
并将此 class 放在代理的 class 路径中,我可以实现身份验证吗以我希望的任何方式(即 LDAP)?
我不能以合理的方式使用 Kerberos,因为它的主体是在我工作的组织中定义的,因此我希望使用 LDAP,因为我需要支持 RBAC。
是的,您可以为 Kafka 提供自定义的 class,实现 LoginModule
并在其中包含您想要的身份验证逻辑。
然后用您的 class 名称更新 JAAS 文件并确保它在 class 路径中。
您需要放置一些样板代码才能正确设置所有内容,但您可以使用 PlainLoginModule
、PlainSaslServerProvider
、PlainSaslServerFactory
和 PlainSaslServer
作为示例。
您的 LoginModule
class 应该具有与 PlainLoginModule
相同的逻辑,但是初始化您的 Provider
实现(在静态块中)。
您的 Provider
class 应具有与 PlainSaslServerProvider
相同的逻辑,但应引用您的 SaslServerFactory
实现。
您的 SaslFactory
class 应该再次具有与 PlainSaslServerFactory
相同的逻辑,但创建您的 SaslServer
实现的实例。
最后,您的 SaslServer
class 应该在其 evaluateResponse()
方法中实施必要的 LDAP 逻辑。只需确保正确设置 this.authorizationId
因为这将成为用户主体并将 complete
设置为 true
(就像 PlainSaslServer.evaluateResponse()
那样)