Logout user via Keycloak REST API doesn't work

后端 未结 6 740
余生分开走
余生分开走 2020-12-14 06:55

I have issue while calling Keycloak\'s logout endpoint from an (mobile) application.

This scenario is supported as stated in its documentation:

6条回答
  •  死守一世寂寞
    2020-12-14 07:23

    Works with Keycloak 6.0.

    Just for clarity: we do expire refreshToken, but accessToken IS STILL VALID while "Access Token Lifespan" time. Next time user tries to renew access token passing refresh token, Keycloak returns 400 Bad request, what should be catch and send as 401 Unauthorised response.

    public void logout(String refreshToken) {
        try {
            MultiValueMap requestParams = new LinkedMultiValueMap<>();
            requestParams.add("client_id", "my-client-id");
            requestParams.add("client_secret", "my-client-id-secret");
            requestParams.add("refresh_token", refreshToken);
    
            logoutUserSession(requestParams);
    
        } catch (Exception e) {
            log.info(e.getMessage(), e);
            throw e;
        }
    }
    
    private void logoutUserSession(MultiValueMap requestParams) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    
        HttpEntity> request = new HttpEntity<>(requestParams, headers);
    
        String url = "/auth/realms/my-realm/protocol/openid-connect/logout";
    
        restTemplate.postForEntity(url, request, Object.class);
        // got response 204, no content
    }
    

提交回复
热议问题