0

我有 zookeeper 配置,允许客户端通过 sasl(使用摘要 md5)进行身份验证。Zookeeper 配置为使用 sasl,sasl 身份验证提供程序存在于 zookeeper 配置中。我有所有用户列表的 jaas 配置。每个客户端都有自己的带有用户名和密码的 jaas 配置文件。在此配置中,一切正常 - 客户端可以使用 zookeeper。

但事情就是这样。我有一些客户端无法直接连接到 Zookeeper - 它连接并验证到单独的模块中。该模块(用 Java 编写)理解传入的请求并使用 Curator Framework 客户端与 Zookeeper 通信,然后在需要时返回结果。

Java 模块有它自己的 jaas 配置用于身份验证(用户/密码),所以基本上它可以在 zookeeper 内部作为一个用户进行身份验证 - 即使有很多用户(具有单独的用户/密码)在这个模块中进行身份验证。

我怎样才能实现java模块可以在zookeeper中验证尽可能多的用户(如果user1调用java模块,它应该在zookeeper中验证为user1,如果user2调用java模块,它应该验证user2等)

这是我尝试过的一种方法(我知道这种方法不是最好的方法,但我不是动物园管理员的专家,所以我还没有更好的主意):

  • Java 模块有许多 jaas 配置(每个用户一个)。
  • 当请求到达并且用户在 java 模块中验证自己时 - 模块选择 jaas 配置(通过将系统属性 java.security.auth.login.config 设置为指向 jaas 配置之一)
  • 模块创建新的 Curator Framework 客户端(它将为来自同一用户的后续请求缓存)
  • 模块使用新客户端对zookeeper进行操作

令我惊讶的是,sasl 身份验证只执行了一次 - 对于第一个策展人客户。所有其他客户端“共享”相同的身份验证。

有什么方法可以让每个客户端对 Zookeeper 使用单独的身份验证?

4

1 回答 1

1

不确定我是否正确理解了这个问题,但这可能与 apache ZK 客户端在内部将 Login 对象创建为单例的事实有关,这意味着同一 JVM 中的每个客户端都将获得第一个/相同的身份验证登录凭据。

于 2015-07-27T10:14:33.187 回答