我有两个应用程序是注册为客户端与Keycloak。第一个应用程序是定制开发的,并使用spring安全来处理注销。
用于注销的代码段:
@Bean(name = "logoutFilter")
public LogoutFilter logoutFilter(AdapterDeploymentContext adapterDeploymentContext, KeycloakProperties keycloakProperties) {
KeycloakLogoutHandler firstHandler = new KeycloakLogoutHandler(adapterDeploymentContext);
SecurityContextLogoutHandler secondHandler = new SecurityContextLogoutHandler();
AntPathRequestMatcher matcher = new AntPathRequestMatcher("/sso/logout**", HttpMethod.POST.toString());
LogoutFilter filter = new LogoutFilter(keycloakProperties.getDefaultTargetLogoutUrl(), firstHandler, secondHandler);
filter.setLogoutRequestMatcher(matcher);
return filter;
}
现在user1
登录到app1, kibana
和keycloak
。如果在app1
中单击注销,则user1
将从app1
和keycloak
应用程序中注销,但user1
会话仍为kibana
活动,并且可以访问它而不会出现任何问题。
我的期望是,当我在app1
中单击注销时,会话应该终止,用户应该从所有会话/应用程序中注销。
1条答案
按热度按时间50few1ms1#
如果您在一个域(如master)中有两个客户端(如app1和app2),且您有用户(如deepak),且可以访问这两个客户端。现在,如果您从app1注销,则app1和app2客户端都将注销,因为它基于用户会话,并且完全基于注销端点。