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

В процессе аутентификации пользовательская сессия получает аутентификационный токен, который передаётся с каждым запросом к кластеру YDB. Поскольку YDB — распределённая система, запросы обрабатываются на разных узлах. Получив запрос, каждый узел независимо проверяет аутентификационный токен и при успешной проверке создаёт токен пользователя.

Аутентификационный токен и токен пользователя — разные сущности. Аутентификационный токен передаётся клиентом. Токен пользователя создаётся внутри узла по результатам проверки, содержит SID пользователя и групп и используется при авторизации. Он хранится только на конкретном узле и не передаётся клиенту.

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

Время жизни токена пользователя и другие аспекты кеширования настраиваются в секции auth_config конфигурации YDB.

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

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

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

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

Важно

При ретрабельной ошибке обновления узел продолжает использовать сохранённый токен пользователя. Поэтому удаление аккаунта или изменение принадлежности пользователя к группам может примениться на конкретном узле только после успешного обновления либо удаления записи из кеша.

ACL не кешируются в токене пользователя, поэтому изменения ACL применяются при следующей проверке прав.

Обновление токенов пользователя

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

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

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

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

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