Infinispan не выполняет маршалинг всего RefreshableKeycloakSecurityContext при использовании Spring Session для экстернализации хранилища сеансов

#spring-boot #spring-security #keycloak #infinispan #spring-session

#spring-boot #spring-безопасность #keycloak #infinispan #spring-session

Вопрос:

Я использую Spring Session для хранения сеанса приложения во внешнем хранилище, в данном случае в кэше Infinispan.

Для этого я внедрил обычай SessionRepository , который использует Infinispan RemoteCacheManager внизу.

«Обычные» объекты из сеанса сохраняются и удаляются без каких-либо проблем.

Мое приложение интегрировано с Keycloak для единого входа с использованием адаптера загрузки Keycloak Spring. Это устанавливает тип объекта сеанса RefreshableKeycloakSecurityContext . Это вызов для сохранения сеанса в удаленном кэше, как вы можете видеть, обновляемый… имеет некоторые атрибуты (KeycloakDeployment, SpringSecurityTokenStore), которые установлены:

введите описание изображения здесь

Но когда атрибут Refreshable … извлекается из хранилища сеансов, KeycloakDeployment и некоторые другие атрибуты исчезают:

введите описание изображения здесь

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

введите описание изображения здесь

Есть идеи, как я мог бы сохранить эти атрибуты, полученные из Infinispan?

Обновить

RefreshableKeycloakSecurityContext определяет KeycloakDeployment и AdapterTokenStore как переходный, поэтому они не предназначены для сериализации. Проблема с этим заключается в том, что он прерывает адаптер, когда сеанс расширяется, а не просто сериализуется… есть ли обходной путь?

 package org.keycloak.adapters;
...
/**
 * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
 * @version $Revision: 1 $
 */
public class RefreshableKeycloakSecurityContext extends KeycloakSecurityContext {

    protected static Logger log = Logger.getLogger(RefreshableKeycloakSecurityContext.class);

    protected transient KeycloakDeployment deployment;
    protected transient AdapterTokenStore tokenStore;
    protected String refreshToken;
 

Ответ №1:

В используемой нами версии адаптера есть ошибка, исправленная, как указано в следующей проблеме Red Hat: https://issues.redhat.com/browse/KEYCLOAK-6752?attachmentViewMode=list