Logout user session. User must be logged in via a session cookie.
100 String redirect = postLogoutRedirectUri != null ? postLogoutRedirectUri : redirectUri;
102 if (redirect != null) {
104 if (validatedUri == null) {
105 event.event(EventType.LOGOUT);
106 event.detail(Details.REDIRECT_URI, redirect);
107 event.error(Errors.INVALID_REDIRECT_URI);
108 return ErrorPage.error(
session, null, Response.Status.BAD_REQUEST, Messages.INVALID_REDIRECT_URI);
110 redirect = validatedUri;
113 UserSessionModel userSession = null;
114 if (encodedIdToken != null) {
118 }
catch (OAuthErrorException e) {
119 event.event(EventType.LOGOUT);
120 event.error(Errors.INVALID_TOKEN);
121 return ErrorPage.error(
session, null, Response.Status.BAD_REQUEST, Messages.SESSION_NOT_ACTIVE);
126 AuthenticationManager.AuthResult authResult = AuthenticationManager.authenticateIdentityCookie(
session,
realm,
false);
127 if (authResult != null) {
128 userSession = userSession != null ? userSession : authResult.getSession();
129 if (redirect != null) userSession.
setNote(OIDCLoginProtocol.LOGOUT_REDIRECT_URI, redirect);
130 if (state != null) userSession.setNote(OIDCLoginProtocol.LOGOUT_STATE_PARAM, state);
131 userSession.setNote(AuthenticationManager.KEYCLOAK_LOGOUT_PROTOCOL, OIDCLoginProtocol.LOGIN_PROTOCOL);
132 logger.debug(
"Initiating OIDC browser logout");
134 logger.debug(
"finishing OIDC browser logout");
136 }
else if (userSession != null) {
137 event.event(EventType.LOGOUT);
139 event.user(userSession.getUser()).
session(userSession).success();
142 if (redirect != null) {
143 UriBuilder uriBuilder = UriBuilder.fromUri(redirect);
144 if (state != null) uriBuilder.queryParam(OIDCLoginProtocol.STATE_PARAM, state);
145 return Response.status(302).location(uriBuilder.build()).build();
147 return Response.ok().build();
static final Logger logger
Definition: LogoutEndpoint.java:64
KeycloakContext getContext()
TokenManager tokenManager
Definition: LogoutEndpoint.java:78
HttpHeaders headers
Definition: LogoutEndpoint.java:76
UserSessionModel getUserSession(RealmModel realm, String id)
ClientConnection clientConnection
Definition: LogoutEndpoint.java:70
RealmModel realm
Definition: LogoutEndpoint.java:79
KeycloakSession session
Definition: LogoutEndpoint.java:67
void setNote(String name, String value)
UserSessionProvider sessions()