как отключить аутентификацию basi c при использовании kerberos на nginx? - PullRequest
0 голосов
/ 16 июня 2020

Предисловие


В основной части вопроса проблема описана некорректно. Правильное объяснение описано в блоке UPDATE. Старый текст сохранен для истории.


Мой проект состоит из двух частей: backend и frontend. Следующие местоположения отвечают за перенаправление запросов:

location / {
    root /opt/site/;
    try_files $uri $uri/ /index.html;
}

location /adminpanel {
    proxy_pass http://192.168.1.4:4567;
}
location /api {
    proxy_pass http://192.168.1.4:4567;
}

Задача состоит в том, чтобы перенаправить пользователей на url /auth, если в $remote_user header нет логина пользователя. Я попытался сделать такую ​​конструкцию: в http я добавил:

 map $remote_user $var {
     default      0; 
     ""           1;  
     }

А в location / добавил:

if ($var) {   
      return 301 http://$server_name/auth;
    }

При попытке зайти на сайт я получаю ошибка в моем браузере:

ERR_TOO_MANY_REDIRECTS

Как исправить мой файл конфигурации?

Заранее спасибо !!!

ОБНОВЛЕНИЕ

Моя задача настроить аутентификацию Kerberos на nginx. Бэкэнд - django. Идея состоит в том, что когда делается запрос к api, nginx должен выполнять аутентификацию Kerberos. Но если пользователь не находится в домене, тогда должно произойти перенаправление на страницу авторизации /auth, чтобы пользователь мог пройти аутентификацию под учетной записью, зарегистрированной в django CMS.

Аутентификация пользователей домена успешно. Но есть проблема с пользователями не из домена. Когда вы открываете страницу сайта, которая выполняет вызов api, появляется окно аутентификации basi c. Я использую директиву auth_gss_allow_basic_fallback off, но это не помогает.

Как мне отключить это и настроить перенаправление на /auth?

Мой файл конфигурации (я не указываю такие параметры, как gzip, заголовки и т. д. c.):

server {
    listen       80;
    server_name  srv-01.example.com;

    proxy_set_header remote-user $remote_user;

    location / {
        root /opt/site/;
        try_files $uri $uri/ /index.html;
    }

    location /adminpanel {
        proxy_pass http://192.168.1.4:4567;
    }
    location /api {
        proxy_pass http://192.168.1.4:4567;

    auth_gss on;
    auth_gss_realm EXAMPLE.COM;
    auth_gss_keytab /etc/krb5.keytab;
    auth_gss_service_name HTTP/srv-01.example.com;
    auth_gss_allow_basic_fallback off;
    }}
...