From b1c0c9d40edcf1877698afb865f46c7f498ce7d7 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Thu, 27 Apr 2023 20:49:29 +0000 Subject: [PATCH] GitHub Actions: limit permissions of GITHUB_TOKEN --- src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java | 39 ++++++++++++++++++++++++++++----------- 1 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java b/src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java index 14f276a..0317f0d 100644 --- a/src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java +++ b/src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java @@ -4,6 +4,7 @@ import org.jboss.logging.Logger; import org.keycloak.common.util.KeycloakUriBuilder; import org.keycloak.common.util.Time; +import org.keycloak.events.Details; import org.keycloak.events.EventBuilder; import org.keycloak.events.EventType; import org.keycloak.forms.login.LoginFormsProvider; @@ -36,6 +37,7 @@ public static final String FORMAT_PARAM = "format"; public static final String TICKET_RESPONSE_PARAM = "ticket"; + public static final String SAMLART_RESPONSE_PARAM = "SAMLart"; public static final String SERVICE_TICKET_PREFIX = "ST-"; public static final String SESSION_SERVICE_TICKET = "service_ticket"; @@ -96,13 +98,22 @@ String service = authSession.getRedirectUri(); //TODO validate service - OAuth2Code codeData = new OAuth2Code(UUID.randomUUID(), + OAuth2Code codeData = new OAuth2Code(UUID.randomUUID().toString(), Time.currentTime() + userSession.getRealm().getAccessCodeLifespan(), - null, null, authSession.getRedirectUri(), null, null); + null, null, authSession.getRedirectUri(), null, null, + userSession.getId()); String code = OAuth2CodeParser.persistCode(session, clientSession, codeData); KeycloakUriBuilder uriBuilder = KeycloakUriBuilder.fromUri(service); - uriBuilder.queryParam(TICKET_RESPONSE_PARAM, SERVICE_TICKET_PREFIX + code); + + String loginTicket = SERVICE_TICKET_PREFIX + code; + + if (authSession.getClientNotes().containsKey(CASLoginProtocol.TARGET_PARAM)) { + // This was a SAML 1.1 auth request so return the ticket ID as "SAMLart" instead of "ticket" + uriBuilder.queryParam(SAMLART_RESPONSE_PARAM, loginTicket); + } else { + uriBuilder.queryParam(TICKET_RESPONSE_PARAM, loginTicket); + } URI redirectUri = uriBuilder.build(); @@ -134,8 +145,8 @@ } private void sendSingleLogoutRequest(String logoutUrl, String serviceTicket) { - HttpEntity requestEntity = LogoutHelper.buildSingleLogoutRequest(serviceTicket); try { + HttpEntity requestEntity = LogoutHelper.buildSingleLogoutRequest(serviceTicket); LogoutHelper.postWithRedirect(session, logoutUrl, requestEntity); logger.debug("Sent CAS single logout for service " + logoutUrl); } catch (IOException e) { @@ -150,19 +161,25 @@ } @Override - public Response finishLogout(UserSessionModel userSession) { + public Response finishBrowserLogout(UserSessionModel userSession, AuthenticationSessionModel logoutSession) { String redirectUri = userSession.getNote(CASLoginProtocol.LOGOUT_REDIRECT_URI); - event.event(EventType.LOGOUT); - event.user(userSession.getUser()).session(userSession).success(); + event.event(EventType.LOGOUT) + .user(userSession.getUser()) + .session(userSession) + .detail(Details.USERNAME, userSession.getUser().getUsername()); if (redirectUri != null) { + event.detail(Details.REDIRECT_URI, redirectUri); + event.success(); return Response.status(302).location(URI.create(redirectUri)).build(); - } else { - LoginFormsProvider infoPage = session.getProvider(LoginFormsProvider.class).setSuccess("Logout successful"); - infoPage.setAttribute("skipLink", true); - return infoPage.createInfoPage(); } + + event.success(); + + LoginFormsProvider infoPage = session.getProvider(LoginFormsProvider.class).setSuccess("Logout successful"); + infoPage.setAttribute("skipLink", true); + return infoPage.createInfoPage(); } @Override -- Gitblit v1.9.1