Назад | Перейти на главную страницу

Как отключить базовую аутентификацию при использовании Kerberos на nginx?

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

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

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

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

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;
}}

Спасибо за помощь!

Возможно, я ошибаюсь, но я думаю, что к вызовам API, которые вы делаете через AJAX, не будут прикреплены учетные данные для аутентификации. Браузер прикрепит их только для навигации по URL

У меня очень похожая установка, и она работает для меня:

По умолчанию / обработчик указывает на диалоговое окно входа в систему, но / автоматический вход находится под auth_gss

Обратите внимание, что nginx возвращает 401, если пользователь не аутентифицирован в домене, поэтому, перенаправив 401 для этой конечной точки, мы можем заставить пользователей, не относящихся к AD, получить диалог входа в систему.

Обработчик / auto-login просто создает cookie сеанса django и перенаправляет на /, чтобы пользователи AD входили в систему напрямую:

location /auto-login {
  uwsgi_pass django;
  include /usr/lib/myapp/wsgi/uwsgi_params;
  auth_gss on;
  auth_gss_realm EXAMPLE.COM;
  auth_gss_service_name HTTP/example.com;
  auth_gss_allow_basic_fallback off;

  error_page 401 /;
}

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

location /heart-beat {
  uwsgi_pass django;
  include /usr/lib/myapp/wsgi/uwsgi_params;
  auth_gss on;
  auth_gss_realm EXAMPLE.COM;
  auth_gss_service_name HTTP/example.com;
  auth_gss_allow_basic_fallback off;
}