Использование Ticket Cache в API Kafka Producer Java - PullRequest
1 голос
/ 06 марта 2020

Я хочу написать приложение Java, которое использует кэш Ticket клиента, а не файл Keytab. Все примеры, которые я нашел, работают с конфигурацией JAAS, которая определяет Keytab и принципал (useTicketCache = false).

Я пытался использовать следующее содержимое JAAS (kafka_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 без использования кэша билетов. Этот способ также работает для меня, но я не хочу / хочу go ...

Можно ли вообще использовать кеш билетов в моем приложении клиента Kafka Java? Или способ keytab - единственная возможность? Спасибо!

...