---
metadata:
  - name: generator
    content: Diplodoc Platform v5.59.0
alternate:
  - https://ydb.tech/docs/ru/security/caching-authentication-results.md
  - href: https://ydb.tech/docs/ru/security/caching-authentication-results.md
    type: text/markdown
    title: Markdown version
  - href: https://ydb.tech/docs/ru/llms.txt
    rel: describedby
sourcePath: ru/core/security/caching-authentication-results.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Кеширование результатов аутентификации

В процессе аутентификации пользовательская сессия получает [аутентификационный токен](https://ydb.tech/docs/ru/concepts/glossary.md#auth-token), который передаётся с каждым запросом к кластеру YDB. Поскольку YDB — распределённая система, запросы обрабатываются на разных [узлах](https://ydb.tech/docs/ru/concepts/glossary.md#node). Получив запрос, каждый узел независимо [проверяет аутентификационный токен](https://ydb.tech/docs/ru/security/authentication.md#token-validation) и при успешной проверке создаёт [токен пользователя](https://ydb.tech/docs/ru/concepts/glossary.md#user-token).

Аутентификационный токен и токен пользователя — разные сущности. Аутентификационный токен передаётся клиентом. Токен пользователя создаётся внутри узла по результатам проверки, содержит [SID](https://ydb.tech/docs/ru/concepts/glossary.md#access-sid) пользователя и групп и используется при [авторизации](https://ydb.tech/docs/ru/security/authorization.md). Он хранится только на конкретном узле и не передаётся клиенту.

Узел сохраняет токен пользователя в кеше. Ключ записи включает аутентификационный токен и контекст проверки, например базу данных, атрибуты и запрошенные [права доступа](https://ydb.tech/docs/ru/concepts/glossary.md#access-right). Последующий запрос использует кешированную запись только при совпадении ключа.

<!-- source: ru/security/_assets/user-token.md -->
```mermaid
sequenceDiagram
    actor user as Пользователь
    participant node as Узел YDB
    participant cache as Кеш узла
    participant auth as Подсистема аутентификации

    user->>node: Первый запрос с аутентификационным токеном
    node->>cache: Найти запись по ключу
    cache-->>node: Запись отсутствует
    node->>auth: Проверить аутентификационный токен
    auth-->>node: Результат проверки
    node->>node: Создать токен пользователя
    node->>cache: Сохранить токен пользователя
    node-->>user: Обработать запрос

    user->>node: Следующий запрос с тем же ключом
    node->>cache: Найти запись по ключу
    cache-->>node: Токен пользователя
    node-->>user: Обработать запрос
```
<!-- endsource: ru/security/_assets/user-token.md -->

Время жизни токена пользователя и другие аспекты кеширования настраиваются в [секции `auth_config` конфигурации YDB](https://ydb.tech/docs/ru/reference/configuration/auth_config.md#caching-auth-results).

## Время жизни записи в кеше

Запись с токеном пользователя удаляется из кеша, если выполняется одно из условий:

- Запись не использовалась в течение `auth_config.life_time`. Время последнего использования записи обновляет только запрос, совпадающий по ключу кеша (аутентификационному токену и контексту проверки).
- Истёк срок действия записи. Для токенов входа по логину и паролю и токенов внешнего провайдера идентификации срок записи определяется сроком действия аутентификационного токена. Для запросов с подписью ключом доступа используется `auth_config.as_signature_expire_time`, для остальных типов — `auth_config.expire_time`.

Ретрабельной считается ошибка, после которой проверку можно повторить без изменения запроса. Тип ошибки определяет соответствующая подсистема аутентификации.

{% note warning %}

При ретрабельной ошибке обновления узел продолжает использовать сохранённый токен пользователя. Поэтому удаление аккаунта или изменение принадлежности пользователя к [группам](https://ydb.tech/docs/ru/security/authorization.md#group) может примениться на конкретном узле только после успешного обновления либо удаления записи из кеша.

[ACL](https://ydb.tech/docs/ru/concepts/glossary.md#access-control-list) не кешируются в токене пользователя, поэтому изменения ACL применяются при следующей проверке прав.

{% endnote %}

<!-- source: ru/security/_assets/user-token-lifecycle.md -->
```mermaid
sequenceDiagram
    actor user as Пользователь
    participant node as Узел YDB
    participant cache as Кеш узла
    participant auth as Подсистема аутентификации

    user->>node: Запрос с теми же данными
    node->>cache: Найти запись
    cache-->>node: Запись найдена
    Note right of cache: Отсчёт life_time начинается заново

    opt Наступило время обновления
        node->>auth: Повторно проверить аутентификационный токен
        alt Успешная проверка
            auth-->>node: Результат проверки
            node->>node: Создать новый токен пользователя
            node->>cache: Обновить запись
        else Ретрабельная ошибка
            auth-->>node: Ошибка
            Note right of node: Запланировать повторную попытку
        else Постоянная ошибка
            auth-->>node: Ошибка
            node->>cache: Перестать использовать токен пользователя
        end
    end

    alt Запись не использовалась в течение life_time или истёк срок действия
        node->>cache: Удалить запись
    end
```
<!-- endsource: ru/security/_assets/user-token-lifecycle.md -->

## Обновление токенов пользователя {#refreshing-user-tokens}

Для обновляемых аутентификационных токенов узел периодически повторяет проверку и заменяет токен пользователя в кеше. В зависимости от способа аутентификации проверка выполняется локально или требует обращения к внешней системе. После успешной проверки обновляются SID пользователя и групп.

Параметр `auth_config.refresh_time` задаёт максимальный интервал до следующей проверки. Конкретный момент выбирается в диапазоне от `refresh_time/2` до `refresh_time`.

После ретрабельной ошибки повторные попытки продолжаются до успешного обновления, постоянной ошибки или удаления записи из кеша. Интервалы между попытками задаются параметрами `min_error_refresh_time` и `max_error_refresh_time`. Для токенов входа по логину и паролю и токенов внешнего провайдера идентификации попытки также прекращаются после истечения срока действия аутентификационного токена.

Возможные причины ошибок при проверке и обновлении кешированных результатов включают, но не ограничиваются следующими:

- сетевые ошибки и тайм-ауты при обращении к внешней системе аутентификации;
- недоступность или перегрузка внешней системы аутентификации;
- недоступность локального состояния безопасности, необходимого для проверки;
- перегрузка узла YDB или истечение времени обработки запроса.
