Обновление сопоставления ролей пользователей в Keycloak с помощью пользовательского хранилища SPI - PullRequest
0 голосов
/ 01 марта 2019

Я разработал провайдер Keycloak и зарегистрировал его в федерации пользователей.Мои пользователи хранятся в базе данных MySQL.Он работает нормально, и всякий раз, когда вызывается getUserById (), keycloak вызывает мой реализованный метод, и возвращается пользователь с соответствующими ролями, а пользователь кэшируется.Проблема возникает, когда я обновляю пользовательские роли внешне (на каком-то другом / внешнем портале), теперь я хочу сказать Keycloak сделать недействительным кеш (возможно, через какой-то REST API), чтобы он вызывал мой метод getUserById () или getUserByUsername ()еще раз.

Каков наилучший способ сделать это?

Спасибо!

1 Ответ

0 голосов
/ 03 сентября 2019

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

В примере:

Я поставил этот кодв верхней части метода isValid.

public boolean isValid(RealmModel realm, UserModel user, CredentialInput input)
{
        CustomUserAdapter userDb;
        if (user instanceof CachedUserModel)
        {
            userDb = (CustomUserAdapter)this.getUserByUsername(user.getUsername(), realm);
        }
        else if (user instanceof CustomUserAdapter)
        {
            userDb = (CustomUserAdapter)user;
        }
[...]
Your custom code
[...]
}

Другой способ - изменить настройки федерации пользователя, задав для политики кэширования значение NO_CACHE.

Отключить политику кэширования SPI хранилища данных пользователя

...