Зачем мучиться с OAuth когда есть SuperTokens
Каждый раз, когда я начинаю новый проект, настройка авторизации превращается в отдельный круг ада. С одной стороны хочется быстро накидать Firebase или Auth0 и забыть, но потом просыпается внутренняя жаба (из-за ценников за активных пользователей) и паранойя (данные лежат непонятно где). С другой стороны, писать свою систему сессий с нуля — это верный способ продолбать какой-нибудь нюанс с безопасностью и подставиться под атаку.
Недавно наткнулся на SuperTokens, и это, кажется, тот самый средний путь, который мы все искали.

Что это и для кого
SuperTokens позиционирует себя как open-source альтернатива тяжеловесам вроде AWS Cognito или Auth0. Ребята пытаются усидеть на двух стульях: дать разработчику готовые SDK, чтобы не возиться с низкоуровневыми протоколами, и при этом позволить развернуть всё на своих серверах.
Главная фишка тут в архитектуре. Это не просто библиотека для вашего бэкенда. Система состоит из трех частей:
- Фронтенд-SDK (React, React Native, Vanilla JS) — рулит токенами и рисует формы.
- Бэкенд-SDK (Node.js, Go, Python) — дает API вашему фронту.
- SuperTokens Core — отдельный HTTP-микросервис на Java, который работает с базой данных и хранит логику.

Что умеет из коробки
Список возможностей выглядит стандартно, но дьявол, как обычно, в деталях реализации сессий.
- Вход без пароля. Можно настроить логин через магические ссылки или OTP.
- Социалки. Google, Apple, GitHub и прочие радости жизни.
- Управление сессиями. Это, пожалуй, самая сильная сторона. Они реализовали механизм ротации токенов, который защищает от кражи сессии. Если кто-то украдет токен, система это поймет при обновлении и сбросит все активные сессии пользователя.
- Multi-tenancy. Полезно для B2B штук, когда нужно разделять пользователей по организациям или логинить их через Enterprise SSO.
Интересно, что проект позволяет использовать свои части по отдельности. Если вам нужен только менеджмент сессий, а логин вы уже написали на Auth0 — можно их подружить.
Почему ядро написано на Java
Когда видишь Java в open-source проекте для авторизации, первая реакция — «о боже, сколько это будет жрать памяти?». Авторы честно отвечают на этот вопрос в репозитории.
Они выбрали Java из-за зрелости экосистемы и строгой типизации, что для безопасности критично. Чтобы не раздувать потребление ресурсов, они используют встроенный Tomcat вместо тяжелых фреймворков. При этом проверка сессии (самая частая операция) происходит внутри бэкенд-SDK на языке вашего приложения (например, на Go), вообще не дергая Java-ядро. В итоге один экземпляр ядра может обслуживать десятки тысяч пользователей на скромном железе.
Как это выглядит в админке
В комплекте идет User Management Dashboard. Она довольно аскетичная, но делает всё, что нужно: можно посмотреть список юзеров, отредактировать их метаданные или принудительно разлогинить кого-то, если есть подозрительная активность.

Удобно, что не нужно лезть в базу руками, чтобы просто поменять роль пользователю или проверить, пришло ли ему письмо с подтверждением почты.
Стоит ли тащить это в проект
SuperTokens подойдет вам, если вы переросли Firebase Auth, но не хотите платить тысячи долларов за Auth0 или возиться с настройкой Keycloak (который бывает избыточным).
Плюсы: — Полный контроль над данными. База ваша, сервера ваши. — Нет привязки к вендору. Если решите уйти, юзерам не придется сбрасывать пароли. — Хорошие SDK для современных языков.
Из минусов: придется обслуживать еще один микросервис (Core). Если вы фанат бессерверных архитектур, это может стать лишней головной болью, хотя у них есть и облачная версия.
В целом, проект выглядит очень живым. 15 тысяч звезд на GitHub и активное комьюнити в Discord внушают доверие. Если планируете новый сервис, где важна приватность данных пользователей, попробуйте потыкать их демо — это сэкономит пару недель разработки авторизации.