Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Skorp321/task_kb

Repository files navigation

Streamlit приложение с LDAP авторизацией и управлением сессиями

Это Streamlit приложение с интегрированной LDAP авторизацией и системой управления сессиями, которая ограничивает количество активных сессий одним на пользователя.

🚀 Основные возможности

  • LDAP авторизация - интеграция с корпоративным LDAP сервером
  • Управление сессиями - ограничение одной активной сессией на пользователя
  • Автоматическое завершение сессий - при входе с нового устройства старая сессия завершается
  • Таймаут сессий - автоматическое завершение неактивных сессий
  • PostgreSQL интеграция - надежное хранение данных сессий
  • Безопасность - логирование всех действий и проверка активности

📋 Требования

  • Python 3.8+
  • PostgreSQL 12+
  • LDAP сервер (Active Directory, OpenLDAP и т.д.)
  • Streamlit

🛠️ Установка

1. Клонирование и установка зависимостей

# Установка зависимостей
pip install -r requirements.txt

2. Настройка базы данных PostgreSQL

# Создание базы данных
createdb streamlit_sessions

# Выполнение SQL схемы
psql -d streamlit_sessions -f database_schema.sql

3. Настройка конфигурации

Скопируйте файл 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=uid

4. Запуск приложения

streamlit run app.py

🔧 Конфигурация

Настройки LDAP

Параметр Описание Пример
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

📊 Структура базы данных

Таблица user_sessions

Поле Тип Описание
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 часов удаляются принудительно

🎯 Использование

Вход в систему

  1. Откройте приложение в браузере
  2. Введите ваши LDAP учетные данные
  3. Нажмите "Войти"

Управление сессиями

  • Просмотр активных сессий - в разделе "Профиль"
  • Завершение всех сессий - в разделе "Безопасность"
  • Обновление сессии - для продления времени активности

Выход из системы

  • Используйте кнопку "Выйти" в боковой панели
  • Или завершите все сессии в разделе "Безопасность"

🐛 Устранение неполадок

Проблемы с 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)

📝 API

SessionManager

Основные методы для управления сессиями:

  • create_session(username, ip_address, user_agent) - создание новой сессии
  • validate_session(session_id) - проверка валидности сессии
  • deactivate_session(session_id) - деактивация сессии
  • deactivate_user_sessions(username) - деактивация всех сессий пользователя
  • cleanup_old_sessions() - очистка старых сессий

LDAPAuth

Методы для LDAP авторизации:

  • authenticate_user(username, password, ip_address, user_agent) - аутентификация
  • validate_session(session_id) - проверка сессии
  • logout_user(session_id) - выход из системы
  • get_user_info(username) - получение информации о пользователе

🤝 Вклад в проект

  1. Форкните репозиторий
  2. Создайте ветку для новой функции
  3. Внесите изменения
  4. Создайте Pull Request

📄 Лицензия

Этот проект распространяется под лицензией MIT.

🆘 Поддержка

При возникновении проблем:

  1. Проверьте логи приложения
  2. Убедитесь в правильности конфигурации
  3. Проверьте подключение к LDAP и PostgreSQL
  4. Создайте Issue в репозитории

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published