Как правильно настроить интеграцию Django с Active Directory через Kerberos?

Я настраиваю личный кабинет с авторизацией через AD, следуя <a href="https://habr.com/ru/articles/274931/?code=355f83fa94ae23e46fde27ccf32efd0d&amp;state=kMjQfaUKYZbh6bRJMCmgyEHC&amp;hl=ru" rel="nofollow">инструкции</a> (Django, Apache2, Kerberos, на моей системе - Ubuntu). Хотя указания несколько устарели, они всё же верны, за исключением используемых библиотек. В целом, процесс вроде бы завершён, но меня беспокоит один момент: <br/> <br/> Даже если я нахожусь на машине и в аккаунте домена, при первом переходе на сайт всё равно требуется ввести логин и пароль (предполагаю, что это требует Apache2). <br/> <br/> После успешной авторизации сайт открывается, и пока браузер открыт, авторизация остаётся активной. Даже если я вручную выполняю logout, система автоматически повторно авторизует меня через Kerberos. Как можно избежать появления запроса логина и пароля после закрытия браузера? Я не до конца понимаю, как это работает под капотом, но у меня складывается впечатление, что при авторизации создаётся тикет, который остается активным до закрытия браузера. <br/>
  • 26 сентября 2024 г. 11:33
Ответы на вопрос 1
Для интеграции 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 и смотреть, проходят ли запросы аутентификации должным образом.
Похожие вопросы