Собственно предлагаю обсудить варианты SSO для домашних сервисов т.к. у меня не все гладко с этим
Что такое SSO
SSO (Single Sign-On) в контексте домашнего хостинга — это технология единого входа, позволяющая пользователям аутентифицироваться один раз для доступа к нескольким сервисам (например, Nextcloud, WordPress, GitLab) без повторного ввода пароля. Для реализации используются протоколы OAuth, OpenID Connect, SAML или LDAP , интегрируемые через сервисы вроде Keycloak или Authelia . Это повышает безопасность, сокращает количество учетных данных и упрощает управление доступом в локальной сети.
Что мне надо
- OIDC для совместимых приложений
- Дополнительные поля пользователя, например, для SSH ключей
- Проксирование аутентифиакации для неподдерживаемых приложений через Traefik
- Поддержка Passkey
Что еще есть, но мне не критично
- LDAP федерация
- SSSD - это просто кайф, но дома пока не готов на это
Какие варианты есть
- AD + ADFS - M$ не хочу
- Keycloak - промышленный стандарт, самая кастомизируемая платформа
- Authentik - сейчас основной и у меня в нем уже 22 приложения заведено
- Zitadel - пробую
- Tinyauth - минималистичный проект на конфигах
- Authelia - не пробовал
- Pocket ID - интересный проект для passkey
- CAS - встречал упоминания его, но не более
- Ory - встречал упоминания его, но не более
- Напишите в комментариях что пользуете дома
Дополнительные ссылки
- Active Directory vs Authentik
- Навеяно видео Authelia vs Authentik vs Keycloak vs Zitadel Как выбрать SSO для своих сервисов by Stilicho 2011
- Обсуждение на реддите
Мой путь
-
В организации использую Keycloak, в целом нравится т.к. это индустриальный стандарт, но это Java и есть требует много ресурсов + проблемы с обновлениями, часть функционала реализуется очень сложно
-
Сейчас развернул дома Authentik, по функционалу устраивает, но Python не является эталоном производительности. Довольно тормозной и на N4000 загрузка в простое под 10%
-
Пробовал демку Pocket-ID - визуално понравился, есть базовый функционал, но отсутствие паролей смущет
-
Сейчас развернул Zitadel, он написан на go и очень быстрый. Пробую настроить тестовые интеграции.
Немного про решения
keycloak
Есть типовая задача, неправильная по архитектуре OIDC, но приходится с этим работать:
Проверка прав доступ при аутентификации пользователя и выдача 403 ошибки еще в IdP без выдачи токена клиенту
Тут правильно выдавать JWT токен клиенту т.к. SSO занимается аутентификацией, а авторизацией уже сами клиенты и с полученным JWT токеном пользователь идет в приложение, а приложение на основе различных типов ACL, например RBAC проверяет наличие роли в токене и разрешает или запрещает доступ
Но мои приложения так делают, а вот популярные продукты просто пускают пользователя с дефолтными правами
В keycloak я делал несколько заходов, чтобы запрещать доступ в самом keycloak, например, для Rocket Chat и у меня так и ничего не вышло
В Authentik это работает из коробки и очень круто
- Еще добавление новых клиентов в keycloak чуть сложнее и приходится ковыряться в настройках, в authentik прям проще
- Authentication proxy нет из коробки но есть готовые sidecar решения, настраивать дольше, но фишка в том, что можно настраивать точечно права, например
/api/admin/*разрешить только группеapp_admin`` а ходить на/могут все пользователи в группеapp_users - С realm заморочесто, но при использовании федерации оправдано и у меня прям круто настроено, чего нет в authentik
Authentik
- Мне не нравится производительность
- Хочется кластеризацию, но пока не реализовал и не знаю можно ли легко сделать
- Очень крутая работа с Authentication proxy, причем, я тут расписывал мою схему и она уже поменялась - теперь рядом с traefik на каждой ноде развернут еще и authentik authentication proxy, но очень простая логика разграничения прав
Zitadel
- Пытался поднять несколько дней, в итоге таки запустил его - очень капризная и сложная
- Продукт заточен явно под разработчиков, сразу предлагает создавать клиенты для популярных фреймворков разработки
- Функционала маловато, authentik в этом плане явно более зрелый
- Есть проблема с шрифтами для русского языка
- Своебразная логика, которая отличается от других решений
- Есть действия и вообще какие-то кастомные обработчики
Пока не разобрался
- С настройкой ролей и добавлением их в токен
- Запретом на доступ к приложению в самом zitadel
- Authentication proxy
- Отказоустойчивость
- Что делать с проектами в zitadel
- Есть ошибка с настройкой passkey (опять проблемы с документацией и приложением) - вообще проект очень сырой
- Перенос всех приложений из authentik в zitadel
А что вы используете и что посоветуете мне сделать?

