Я использую keycloak 4.8.3 и wildfly-14.0.1 в моем приложении Java.Возникла проблема при удалении сеанса из Servelet Filter.Ниже приведены подходы, которые я попробовал.
Подход 1: Я использую HttpServletRequest.logout()
, чтобы удалить сеанс из keycloak. Этот подход не работает для меня, и я получаю refresh-token
, равныйNULL
Подход 2: Но когда я запускаю вызов покоя, используя команду curl с предоставленным токеном доступа.
curl -X POST -k -H 'Content-Type: application/x-www-form-urlencoded' \
-i 'https://authserver/auth/realms/{realm}/protocol/openid-connect/logout' \
--data 'username=abc&password=def&client_id=client-id&grant_type=refresh_token&client_secret=a682049d-587c-4c38-a594-814f08b0ca7&refresh_token=<refresh_token>'
Этот подход2 работает нормально.
Я не уверен, почему в случае с Java я получаю токен обновления NULL?Ниже приведен код
KeycloakSecurityContext keycloakSecurityContext = (KeycloakSecurityContext)httpRequest.getAttribute( KeycloakSecurityContext.class.getName() );
if(keycloakSecurityContext instanceof RefreshableKeycloakSecurityContext) {
RefreshableKeycloakSecurityContext ksc = (RefreshableKeycloakSecurityContext)keycloakSecurityContext;
RefreshToken refreshToken = ksc.getRefreshToken();
RefreshToken refreshTokenDecoded = TokenUtil.getRefreshToken(refreshToken);