Это Streamlit приложение с интегрированной LDAP авторизацией и системой управления сессиями, которая ограничивает количество активных сессий одним на пользователя.
- LDAP авторизация - интеграция с корпоративным LDAP сервером
- Управление сессиями - ограничение одной активной сессией на пользователя
- Автоматическое завершение сессий - при входе с нового устройства старая сессия завершается
- Таймаут сессий - автоматическое завершение неактивных сессий
- PostgreSQL интеграция - надежное хранение данных сессий
- Безопасность - логирование всех действий и проверка активности
- Python 3.8+
- PostgreSQL 12+
- LDAP сервер (Active Directory, OpenLDAP и т.д.)
- Streamlit
# Установка зависимостей
pip install -r requirements.txt# Создание базы данных
createdb streamlit_sessions
# Выполнение SQL схемы
psql -d streamlit_sessions -f database_schema.sqlСкопируйте файл config.env.example в config.env и заполните настройки:
cp config.env.example config.envОтредактируйте config.env:
# Настройки базы данных PostgreSQL
DB_HOST=localhost
DB_PORT=5432
DB_NAME=streamlit_sessions
DB_USER=postgres
DB_PASSWORD=your_password_here
# Настройки LDAP сервера
LDAP_SERVER=ldap://your-ldap-server:389
LDAP_BASE_DN=dc=example,dc=com
LDAP_USER_FILTER=uid
LDAP_USER_ATTR=uidstreamlit run app.py| Параметр | Описание | Пример |
|---|---|---|
LDAP_SERVER |
Адрес LDAP сервера | ldap://ldap.company.com:389 |
LDAP_BASE_DN |
Базовый DN для поиска | dc=company,dc=com |
LDAP_USER_FILTER |
Атрибут для поиска пользователей | uid или sAMAccountName |
LDAP_USER_ATTR |
Атрибут имени пользователя | uid или cn |
| Параметр | Описание | Пример |
|---|---|---|
DB_HOST |
Хост PostgreSQL | localhost |
DB_PORT |
Порт PostgreSQL | 5432 |
DB_NAME |
Имя базы данных | streamlit_sessions |
DB_USER |
Пользователь БД | postgres |
DB_PASSWORD |
Пароль БД | your_password |
| Поле | Тип | Описание |
|---|---|---|
id |
SERIAL | Первичный ключ |
username |
VARCHAR(255) | Имя пользователя |
session_id |
VARCHAR(255) | Уникальный ID сессии |
created_at |
TIMESTAMP | Время создания сессии |
last_activity |
TIMESTAMP | Время последней активности |
ip_address |
INET | IP адрес пользователя |
user_agent |
TEXT | User-Agent браузера |
is_active |
BOOLEAN | Статус активности сессии |
- Одна сессия на пользователя - при входе с нового устройства старая сессия автоматически завершается
- Таймаут сессий - неактивные сессии автоматически завершаются через 1 час
- Проверка активности - постоянная проверка валидности сессий
- Логирование - все действия пользователей логируются
- Старые неактивные сессии удаляются автоматически
- Очистка выполняется каждые 10 минут
- Сессии старше 24 часов удаляются принудительно
- Откройте приложение в браузере
- Введите ваши LDAP учетные данные
- Нажмите "Войти"
- Просмотр активных сессий - в разделе "Профиль"
- Завершение всех сессий - в разделе "Безопасность"
- Обновление сессии - для продления времени активности
- Используйте кнопку "Выйти" в боковой панели
- Или завершите все сессии в разделе "Безопасность"
# Проверка подключения к LDAP
ldapsearch -H ldap://your-server:389 -D "cn=admin,dc=example,dc=com" -W -b "dc=example,dc=com"# Проверка подключения к PostgreSQL
psql -h localhost -U postgres -d streamlit_sessions -c "SELECT COUNT(*) FROM user_sessions;"Логи приложения выводятся в консоль. Для более детального логирования измените уровень в коде:
logging.basicConfig(level=logging.DEBUG)Основные методы для управления сессиями:
create_session(username, ip_address, user_agent)- создание новой сессииvalidate_session(session_id)- проверка валидности сессииdeactivate_session(session_id)- деактивация сессииdeactivate_user_sessions(username)- деактивация всех сессий пользователяcleanup_old_sessions()- очистка старых сессий
Методы для LDAP авторизации:
authenticate_user(username, password, ip_address, user_agent)- аутентификацияvalidate_session(session_id)- проверка сессииlogout_user(session_id)- выход из системыget_user_info(username)- получение информации о пользователе
- Форкните репозиторий
- Создайте ветку для новой функции
- Внесите изменения
- Создайте Pull Request
Этот проект распространяется под лицензией MIT.
При возникновении проблем:
- Проверьте логи приложения
- Убедитесь в правильности конфигурации
- Проверьте подключение к LDAP и PostgreSQL
- Создайте Issue в репозитории