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).

Дальше#