← Ко всем записям

Архитектура

Provider-agnostic ядро: контракты раньше кода

11 мин

Зачем стек Auth Fly разделён на core, authkit и authkit-hanko — и как этот разрез позволяет менять Hanko на Supabase или собственный Postgres без правок UI и IdP.

Первое, что мы построили, — не фичу, а пакет контрактов. core описывает, что должно знать IdP-флоу, и не импортирует ни UI, ни Hanko, ни хранилище.

Что живёт в core

  • FlowConfig — API URL, имя сессионной cookie, путь логаута, URL скрипта браузерного SDK.
  • FeatureFlags — переключатели регистрации (public, OIDC, SAML).
  • AuthCode / AuthCodeStore — authorization code в стиле OAuth2 для слоя OIDC.
  • CredentialVerifier — проверка bearer- или сессионных токенов, выдача FlowConfig() для UI-слоя.
  • IdentityClaims, хелперы сессии, общие ошибки.

Почему именно в этом порядке

Если ядро зависит от конкретного провайдера, каждый новый провайдер становится форком. Если UI зависит от конкретного провайдера, каждый новый провайдер становится переписыванием UI. Написав контракты первыми, мы заставили остальной стек быть честным.

Как разрез окупается

  • authkit рендерит страницы из ViewConfig, в котором лежит generic FlowConfig — имя провайдера в коде не появляется.
  • authkit-hanko реализует CredentialVerifier для Hanko: проверка JWT + JWKS, извлечение из cookie, правильный указатель SDKScript.
  • IdP собирает и то и другое на старте. Замена Hanko на другой провайдер — это новый пакет рядом с authkit-hanko.

Будущие модули

  • github.com/authfly/core — контракты.
  • github.com/authfly/authkit — hosted-UI.
  • github.com/authfly/authkit-hanko — первый адаптер провайдера.

Логотип Auth Fly

Auth Fly

Открытый конструктор аутентификации

Об Auth Fly