Зачем getKerberosTransport нужен 3-х компонентный принцип керборса? - PullRequest
0 голосов
/ 14 марта 2020

Доброе утро / день / вечер!

Spark 2.4.x, с Hive 1.2.1

Исходный код здесь: https://github.com/apache/spark/blob/master/sql/hive-thriftserver/v1.2/src/main/java/org/apache/hive/service/auth/KerberosSaslHelper.java

 public static TTransport getKerberosTransport(String principal, String host,
    TTransport underlyingTransport, Map<String, String> saslProps, boolean assumeSubject)
    throws SaslException {
    try {
      String[] names = principal.split("[/@]");
      if (names.length != 3) {
        throw new IllegalArgumentException("Kerberos principal should have 3 parts: " + principal);
      }

Теперь вопрос :

Кто-нибудь знает, зачем серверу Spark Thrift нужен принцип Kerberos из 3 частей?

Комиссионный сервер Spark работает, отправляя долгосрочное задание, которое не требует принципа Kerberos из 3 частей ,

Запуск службы, прослушивающей порт, не нуждается в 3-компонентном принципе Kerberos (точно так же, как в истории заданий Spark), верно?

Так что удивляетесь, почему этот код проверяет, состоит ли из 3-х частей принцип или нет ...

Спасибо!

1 Ответ

0 голосов
/ 14 марта 2020

Три части принципала Kerberos {service}/{name}[@{realm}]. Например, host/server.domain.com@realm.com или host/server.domain.com. Клиент полагается на эту информацию, чтобы определить, где находится Kerberos KD C, чтобы он мог запросить билет. Часть области часто необязательна, если имя заканчивается именем области (например, server.realm.com). В этом случае клиент просто говорит об этом.

Я понятия не имею, почему автор решил потребовать все три. Это делает реализацию клиента проще, потому что вам не нужно догадываться о намерениях, но это за счет простоты API.

...