Jenkins/Nginx — двойной запрос на базовую аутентификацию, почему? Почему существует внутренняя аутентификация Jenkins?

Ниже приведен мой файл конфигурации nginx для Jenkins. Большинство из них точно такие, как я читал в документации.

Файл конфигурации:

upstream app_server {
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
    listen 80;
    listen [::]:80 default ipv6only=on;
    server_name sub.mydomain.net;

location ^~ /jenkins/ {

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    if (!-f $request_filename) {
        proxy_pass http://app_server;
        break;
    }

    auth_basic "[....] Please confirm identity...";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

}

При переходе на http://sub.mydomain.net/jenkins мне предлагается выполнить базовую аутентификацию с помощью < em>Сервер говорит: [....] Пожалуйста, подтвердите идентификацию....

Это правильно, но как только я ввожу правильные учетные данные, я снова получаю ЗАПРОС СНОВА для базовой аутентификации, но на этот раз: Сервер говорит: Jenkins.

Откуда берется этот второй скрытый basic_auth?! Это не имеет никакого смысла для меня.

Нажав ОТМЕНА в первом запросе, я правильно получаю сообщение об ошибке 401 Требуется авторизация.

Нажав CANCEL при второй базовой аутентификации ("Сервер говорит: Jenkins"), я получаю:

HTTP ERROR 401

Problem accessing /jenkins/. Reason:

Invalid password/token for user: _____
Powered by Jetty://

Кто-нибудь знает, что, возможно, происходит?


person skålfyfan    schedule 22.02.2016    source источник


Ответы (2)


Нашел решение своей проблемы, выполнив поиск Nginx, используемого в качестве обратного прокси-сервера для любого другого приложения с basic_auth.

Решение было найдено здесь: https://serverfault.com/questions/511846/basic-auth-for-a-tomcat-app-jira-with-nginx-as-reverse-proxy

Строка, которой мне не хватало в моей конфигурации nginx, была:

 # Don't forward auth to Tomcat
 proxy_set_header   Authorization "";

По умолчанию кажется, что после базовой аутентификации Nginx дополнительно перенаправит заголовки аутентификации в Jenkins, и это привело к моей проблеме. Дженкинс получает перенаправленные заголовки аутентификации, а затем думает, что ему тоже нужно авторизоваться?!

Если мы настроим наш обратный прокси-сервер так, чтобы он не пересылал заголовки авторизации, как показано выше, все будет работать как надо. Nginx запросит basic_auth, и после успешной аутентификации мы явно очищаем (сбрасываем?) заголовки аутентификации при пересылке на наш обратный прокси-сервер.

person skålfyfan    schedule 26.02.2016
comment
Большое спасибо Это решило мою проблему. После нескольких часов поисков и гугления... - person sh0umik; 10.06.2016
comment
Спас мой день! Благодарю вас! Кстати, для апача это будет RequestHeader set Authorization "". - person liberborn; 07.12.2018

У меня тоже была эта проблема, в моем случае это было вызвано включением безопасности в самом jenkins, отключение безопасности решило проблему.

Согласно их документам:

Если вы выполняете контроль доступа в Apache, не включайте безопасность в Jenkins, так как эти две вещи будут мешать друг другу.

https://wiki.jenkins-ci.org/display/JENKINS/Apache+frontend+for+security

Похоже, что происходит то, что nginx пересылает ответ auth_basic jenkins, который пытается выполнить auth_basic в ответ. Я еще не нашел удовлетворительного решения проблемы.

person Ohm    schedule 24.02.2016
comment
Спасибо за ответ! Как вы увидите ниже, я нашел решение нашей проблемы, но я думаю, что ваша ссылка на документ может на самом деле показать будущие проблемы и рада за понимание. Перед вашей ссылкой на документ говорится: Этот подход подходит, если потребность в управлении доступом упрощена (например, скрытие Jenkins от всех, кроме нескольких человек), но он имеет тенденцию ломаться, если вы начинаете выполнять более сложную настройку.. .. - к чему мы стремимся? Я хочу разрешить людям в организации по-прежнему получать доступ к Jenkins (через базовую аутентификацию nginx), но не изменять его. - person skålfyfan; 27.02.2016