kerberos在kafka生产者javaapi中使用票据缓存

pqwbnv8z  于 2021-06-05  发布在  Kafka
关注(0)|答案(0)|浏览(601)

我想编写一个java应用程序,它使用客户机的票证缓存,而不是使用keytab文件。我发现的示例都使用jaas配置,它定义了keytab和principal(useticketcache=false)。
我尝试使用以下jaas内容(kafka\u client.jaas):

KafkaClient {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=false
  useTicketCache=true
  serviceName=kafka;
};

在java应用程序中,我使用以下命令设置jaas:

System.setProperty("java.security.auth.login.config", "kafka_client.jaas");

Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "my-server.de:6667");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put("security.protocol", "SASL_PLAINTEXT");
props.put("sasl.kerberos.service.name", "kafka");

KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(props);
kafkaProducer.send(new ProducerRecord<String, String>("test_topic", "key", "value")).get();

此操作不起作用并中止,但出现以下异常:

javax.security.auth.login.LoginException: Could not login: the client is being asked for a password, but the Kafka client code does not currently support obtaining a password from the user. not available to garner  authentication information from the user
    at com.sun.security.auth.module.Krb5LoginModule.promptForPass(Unknown Source) ~[na:1.8.0_191]
    at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Unknown Source) ~[na:1.8.0_191]
    at com.sun.security.auth.module.Krb5LoginModule.login(Unknown Source) ~[na:1.8.0_191]
    [...]

如上所述,我只找到了使用principal+keytab方式而不使用票证缓存的示例。这种方式对我也很有效,但这不是我需要/想要的方式。。。
在我的kafka客户机java应用程序中是否可以使用票证缓存?或者键盘键是唯一的可能?谢谢您!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题