Клиент Spring Cloud Config отправил неверный заголовок Basic Auth - PullRequest
0 голосов
/ 15 января 2019

На моем локальном компьютере запущен клиент Spring Cloud Config (приложение Spring Boot 2.0.5). Он подключается к серверу Spring Cloud Config, на котором включена базовая аутентификация. Все работает отлично, пароль НЕ зашифрован в конфигурационном файле клиента. Итак, свойства:

spring.cloud.config.username=rxcon
spring.cloud.config.password=rxcon

Теперь, когда я перемещаю Spring Boot на другой компьютер и настраиваю его для взаимодействия с другим сервером Spring Cloud Config (который имеет те же учетные данные rxcon / rxcon), я получаю 401 несанкционированный ответ. Поэтому я подумал, что что-то не так с паролем имени пользователя. Мы проверяли снова и снова, и они верны.

Поэтому я увеличил ведение журнала и ожидал, что заголовок авторизации будет иметь значение, подобное:

Basic cnhjb246cnhjb24=

Тем не менее, фактический заголовок:

Basic cnhjb246Pz91Pz8/aWY/Pz9dBD8eJA==

Что расшифровано:

rxcon:??u???if???]?$

Значит, имя пользователя правильное, но что происходит с паролем?

Примечание 1: мы проверили фактическое значение провода заголовка с помощью tcpdump, и да, это неправильное значение.

Примечание 2: значение заголовка Auth не изменяется при изменении пароля.

Примечание 3: когда мы записываем значение свойства (spring.cloud.config.password), мы видим правильный пароль (rxcon)

Примечание 4: протестировано с JDK 1.8, 10 и 11

Если я вставлю файл bootstrap.properties в файл jar, будут ли значения переопределены внешним загрузчиком .properties?

1 Ответ

0 голосов
/ 15 января 2019

ОК, я нашел проблему. Spring Boot DOES позволяет переопределять свойства. У нас был встроенный файл bootstrap.properties со значениями по умолчанию (development) и мы заменили его внешним файлом bootstrap.properties. Однако свойства ENCRYPTED не переопределяются свойствами обычного текста. Таким образом, у нас было зашифрованное встроенное spring.cloud.config.password и его текстовая версия во внешнем файле bootstrap.properties. (я сказал, что мы не использовали шифрование, но это было верно только для внешнего файла конфигурации. Встроенный файл был!) Когда Spring Cloud Config прочитает все источники свойств, он ищет зашифрованные свойства (начиная с с {cipher}), расшифровывает их и помещает их в PropertySource с наивысшим приоритетом. Таким образом, встроенное зашифрованное свойство эффективно скрывает незашифрованное экстернализованное.

...