BorisovAI
Все публикации
Новая функцияborisovai-adminGit коммит

SSO за выходные: как я запустил Authelia на боевом сервере

SSO за выходные: как я запустил Authelia на боевом сервере

Authelia в боевых условиях: как я собрал Single Sign-On за выходные

Задача была амбициозная: в проекте borisovai-admin нужно было внедрить полноценную систему единой авторизации. На площадке работают несколько приложений — Management UI, n8n, Mailu, и каждое требует свой вход. Кошмар для пользователя и сущее издевательство над принципом DRY. Решение напрашивалось само: Authelia — современный SSO-сервер, который справляется с аутентификацией одной рукой и может интегрироваться практически с чем угодно.

С чего я начал

Первым делом создал install-authelia.sh — полный скрипт установки, который берёт на себя всю рутину: скачивает бинарник, генерирует секреты, прописывает конфиги и регистрирует Authelia как systemd-сервис. Это был ключевой момент — автоматизация означала, что процесс установки можно повторить в три команды без магических танцев с палочкой.

Потом встала задача интеграции с Traefik, который у нас отвечает за маршрутизацию. Здесь нужен был ForwardAuth — middleware, который перехватывает запросы и проверяет, авторизован ли пользователь. Создал authelia.yml с настройкой ForwardAuth для auth.borisovai.ru/tech. Суть простая: любой запрос сначала идёт в Authelia, и если она вас узнала — пропускаем дальше, если нет — отправляем на страницу входа.

Dual-mode, или как угодить двум господам одновременно

Самое интересное началось, когда понадобилось поддержать сразу два способа авторизации. Management UI должна работать и как классическое веб-приложение с сессиями, и как API с Bearer-токенами через OIDC (OpenID Connect). Пришлось написать server.js с логикой, которая проверяет, что именно пришло в запросе: если есть Bearer-токен — валидируем через OIDC, если нет — смотрим на сессию.

Включил в проект express-openid-connect — стандартную библиотеку для интеграции OIDC в Express. Хитрость в том, что Authelia может быть и провайдером OIDC, и middleware ForwardAuth одновременно. Просто берёшь конфиг для OIDC из Management UI, подтягиваешь его в config.json через автоопределение (этим займется install-management-ui.sh), и всё начинает работать как часы.

Неожиданный поворот с logout

Оказалось, что обычный logout в веб-приложении — это не просто удалить cookie. Если вы авторизовались через OIDC, нужно ещё уведомить Authelia, что сессия закончена. Пришлось настроить пять HTML-страниц с поддержкой OIDC redirect: пользователь нажимает logout, приложение отправляет его в Authelia, Authelia убивает сессию и редиректит обратно на страницу выхода. Выглядит просто, но заставляет задуматься о том, как много движущихся частей в современном веб.

Интересный факт: ForwardAuth vs Reverse Proxy Authentication

Знаешь ли ты, что многие разработчики путают эти два подхода? ForwardAuth — это когда сам прокси отправляет запрос на сервер аутентификации. А Reverse Proxy Authentication — это когда сервер приложения полностью отдаёт авторизацию на откуп прокси. Authelia работает с обоими, но ForwardAuth даёт больше контроля — приложение всё равно может принять дополнительные решения на основе данных пользователя.

Итог: от идеи к prod

Всё сложилось в единую систему благодаря интеграции на уровне install-all.sh — компонент INSTALL_AUTHELIA занимает шаг [7.5/10], что означает: это не первый день, но далеко не последний штрих. Management UI теперь умеет сама себя конфигурировать, находя Authelia в сети, подтягивая OIDC-конфиг и автоматически подключаясь.

Главное, чему я научился: SSO — это не просто чёрный ящик, куда ты кидаешь пароли. Это экосистема, где каждый компонент должен понимать друг друга: ForwardAuth, OIDC, сессии, logout. И когда всё это работает вместе, пользователь вводит пароль один раз и может спокойно прыгать между всеми приложениями. Вот это да.

Почему React расстался с разработчиком? Слишком много зависимостей в отношениях 😄

Метаданные

Branch:
main
Dev Joke
Почему React расстался с разработчиком? Слишком много зависимостей в отношениях

Оцените материал

0/1000