Identity и сессия#
Identity представляет одну область сессии. Она хранит привязки авторизации, поставщика ключей
подписи, зависимости и наблюдателя. Cookies, прокси и пул соединений принадлежат клиенту, а не
Identity (eazy_sdk.identity).
Это граница пользователя, а не транспорта.
flowchart LR
Identity["Identity пользователя"] --> Root["Корень SDK"]
Root --> Accounts["AccountApi"]
Root --> Messages["MessagesApi"]
Identity --> Auth["Auth providers"]
Identity --> Keys["Ключи подписи"]
Identity --> Dependencies["Зависимости"]
Client["Клиент транспорта"] --> Accounts
Client --> Messages
Client --> Pool["Соединения, cookies, proxy"]
Корень разрешает Identity один раз и передаёт одну runtime-область всем своим роутерам. Две
привязки одной схемы в одной Identity отклоняются как ошибка плана
(_identity_scope,
eazy_sdk.root).
Одна Identity может обслуживать несколько сервисов и клиентов. Другому пользователю нужна другая
Identity, но не обязательно новый пул соединений. Привязка bind(...) независимо выбирает клиент
и адрес для каждого класса роутера
(eazy_sdk.root).
session_auth(...) соединяет учётные данные, сервис входа и хранилище сессии. Поставщик получает
сессию перед запросом, обновляет её заранее по сроку или после 401, затем повторяет только
идемпотентную операцию
(eazy_sdk.auth.session_runtime).
Для входа и обновления Identity получает ограниченную копию SDK на отдельном графе жизненного
цикла. Такая копия не регистрирует фабрику повторно и не может рекурсивно вызвать тот же вход
(bind_session_lifecycle).