当前位置: 首页 > 知识库问答 >
问题:

在zookeeper中使用sasl从单个java应用程序进行多用户认证

刘德义
2023-03-14

我有zookeeper配置,允许客户端通过sasl认证(使用digest md5)。Zookeeper配置为使用sasl,sasl身份验证提供程序存在于zookeeper配置中。我有jaas配置和所有用户的列表。每个客户端都有自己的jaas配置文件,其中包含用户和密码。在这种配置下,一切都很好——客户端可以使用zookeeper。

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

Java模块有自己的jaas身份验证配置(用户/密码),因此基本上它可以作为一个用户在动物园管理员内部进行身份验证——即使在这个模块中有许多用户(具有单独的用户/通行证)进行身份验证。

如何实现Java模块可以在动物园管理员中对尽可能多的用户进行身份验证(如果用户1调用java模块,它应该在动物园管理员中作为用户1进行身份验证,如果用户2调用java模块,它应该对用户2进行身份验证,等等)

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

    < li>Java模块有许多jaas配置(每个用户一个)。 < li >当请求到达并且用户在java模块中验证自身时,模块选择jaas配置(通过设置系统属性Java . security . auth . log in . config以指向其中一个jaas配置) < li >模块创建新的策展人框架客户端(将为同一用户的后续请求进行缓存) < li >模块使用新客户端在zookeeper上执行操作

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

有没有办法让每个客户端都使用单独的身份验证来zookeeper?

共有1个答案

夏建木
2023-03-14

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

 类似资料:
  • 我怎么能做到..以编程方式有什么方法可以做到这一点。 Pls救命!

  • 问题内容: 我正在尝试在具有Go的App Engine部署中使用具有域范围委托(DwD)的服务帐户。 我已经按照步骤使用Google应用程序默认凭据在App Engine中使用服务帐户。 我的代码在我的开发机器上本地运行,但是我一直坚持从域中检索实际数据。 我正在使用Admin SDK。在“将域范围的权限委派给您的服务帐户”部分下,它说我“服务帐户需要模拟其中一个用户来访问Admin SDK Di

  • 问题内容: 我想通过JDBC连接到两个不同的Oracle数据库(一个8.0.5.0.0和一个12c)。我确实有两个JDBC驱动程序,它们可以通过简单的“ hello world”应用程序分别成功地连接到相应的DB。下面,我将它们都放在一个Java应用程序中,不幸的是,该应用程序不再起作用(加载了两个驱动程序)。 我已经阅读了这篇文章:从SAMEVENDOR处理多个JDBC驱动程序。提到的选项1可能

  • 问题内容: 当前,我的应用程序中只有一种身份验证机制,即使用LDAP进行身份验证和授权。我的安全配置如下所示 但是,在某些情况下,用户可能会带有可以从会话密钥服务器进行身份验证的会话令牌,而有效令牌会返回用户名,然后该用户名可用于从LDAP加载该用户的身份验证信息。因此,我的第二种身份验证机制应该首先发生,如果HTTP标头中存在会话令牌,则应执行令牌身份验证,然后进行ldap查找,如果不存在会话令

  • 我正在将当前的应用程序迁移到多租户体系结构。由于只有一个代码库,我需要解决多个租户的问题。我使用的是单数据库、多模式的方法。每个租户将被分配一个单独的模式,其中元数据保存在默认模式中。 应用程序是用ASP构建的。NET MVC。我使用Dapper连接到我的SQL Server。我有50个函数,使用直接查询和存储过程调用数据库。当为每个租户初始化dapper时,是否有任何方法可以在不改变函数的情况下