Для интеграции Django с Active Directory через Kerberos и обеспечения однократной авторизации без запроса логина и пароля, важно правильно настроить как Apache, так и сам Django-приложение. Если у вас уже имеется работающая конфигурация, но вы сталкиваетесь с проблемой постоянного запроса логина, это может быть связано с настройками Apache или кэшем тикетов Kerberos.
### Настройка Apache
1. **Убедитесь, что модуль `mod_auth_gssapi` установлен и активен.** Это необходимо для поддержки Kerberos аутентификации.
```sh
sudo apt-get install libapache2-mod-auth-gssapi
sudo a2enmod auth_gssapi
```
2. **Проверьте конфигурацию Apache.** Необходимо настроить соответствующий виртуальный хост для использования Kerberos аутентификации. Пример конфигурации:
```apache
<VirtualHost *:80>
ServerName yourdomain.com
# Настраиваем Kerberos аутентификацию
AuthType GSSAPI
AuthName "Kerberos Login"
GSSAPICredStore keytab:/etc/krb5.keytab
GSSAPIUseSession On
<Location "/">
Require valid-user
</Location>
WSGIScriptAlias / /path/to/your/wsgi.py
WSGIDaemonProcess yourapp python-home=/path/to/venv python-path=/path/to/your/project
WSGIProcessGroup yourapp
</VirtualHost>
```
3. **Убедитесь, что файлы настроены правильно.** Проверьте, что `krb5.keytab` содержит правильные записи для вашей службы и что у Apache есть доступ к этому файлу.
### Настройка Kerberos
1. **Обновите файл конфигурации Kerberos `/etc/krb5.conf`.** Убедитесь, что он верно настроен для вашего домена.
2. **Попробуйте сбросить тикеты Kerberos.** Используйте команду `kdestroy`, чтобы удалить предыдущие тикеты, и затем получите новый с помощью `kinit`.
### Доменные настройки
1. **Проверьте настройки вашего домена.** Убедитесь, что ваша учетная запись Kerberos имеет правильные права доступа для подключения к вашему приложению.
### Настройка браузера
Некоторые браузеры могут по умолчанию не передавать Kerberos тикеты автоматически. Убедитесь, что в вашем браузере заданы правильные настройки для инкапсуляции Kerberos.
Для Chrome и Firefox это может выглядеть так:
- **Для Chrome:** добавьте домен в параметры командной строки при запуске:
```
--auth-server-whitelist="*.yourdomain.com"
```
- **Для Firefox:** откройте `about:config` и настройте `network.negotiate-auth.trusted-uris` и `network.automatic-ntlm-auth.trusted-uris`.
### Обработка сессий в Django
Если проблема заключается в том, что сессии не сохраняются после выхода, убедитесь, что используется правильный бэкенд для хранения сессий и что он настроен должным образом в `settings.py`:
```python
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # или другой подходящий backend
```
### Резюме
1. Убедитесь, что Kerberos и Apache настроены правильно.
2. Убедитесь, что настройки браузера позволяют передавать тикеты Kerberos.
3. Проверьте, что сессии в Django правильно управляются.
Если после всех этих шагов проблема остаётся, стоит проверить логи Apache и смотреть, проходят ли запросы аутентификации должным образом.