首页 > 解决方案 > 由于不正确的 jaas.conf 导致 Kafka TopicAuthorizationException

问题描述

我指的是JAAS 登录配置文件。它讨论了两种指定要使用的登录配置文件的方法:

  1. 我们设置jaas.conf通过 VM arg的第一种方法java.security.auth.login.config
  2. 第二个通过安全属性文件是java.security位于lib/securityJRE 目录下的文件。在第二种方法中,我们可以指定多个文件。

有没有办法使用设置 VM arg 的第一种方法来指定多个 jaas.conf 文件java.security.auth.login.config?或者,如果您对解决问题有任何其他建议。

背景: 我面临的问题是:我们有 2 种不同类型的 Kafka 事件(比如ABCXYZ),它们对应jaas.conf于不同的Keytabprincipal。当它想要发布ABC时,它会将java.security.auth.login.config属性设置为ABC 的 jaas.conf ,并在我们想要发布时更改为XYZ 的 jaas.conf 。

但是,上述逻辑存在一些问题,并且org.springframework.kafka.core.KafkaProducerException: Failed to send; nested exception is org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics对于它尝试发布的第二个事件失败。即使对于第二个事件,它也会尝试使用第一个事件的原因,初步查看原因jaas.conf

堆栈跟踪:

org.springframework.kafka.core.KafkaProducerException: Failed to send; nested exception is org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [XYZ]
    at org.springframework.kafka.core.KafkaTemplate$1.onCompletion(KafkaTemplate.java:341)
    at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:827)
    at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:768)
    at org.springframework.kafka.core.DefaultKafkaProducerFactory$CloseSafeProducer.send(DefaultKafkaProducerFactory.java:272)
    at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:327)
    at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:197)

标签: authenticationapache-kafkajaas

解决方案


推荐阅读