Моя задача - настроить аутентификацию 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;
}