Restored per-session token removal. Logs revised. (#20445)

This commit is contained in:
Mauro Mugnaini 2021-01-20 01:02:24 +01:00
parent b3f9d6cd24
commit e6c453e2bb
3 changed files with 32 additions and 23 deletions

View File

@ -38,16 +38,16 @@ public class OpenIdConnectAutoLogin extends BaseAutoLogin {
@Override
public String[] doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {
if (log.isTraceEnabled() && request.getSession(false) != null) {
log.trace("Session details: id=" + request.getSession(false).getId() + ", instance="
+ request.getSession(false));
}
JWTToken token = JWTTokenUtil.getOIDCFromRequest(request);
if (token == null) {
if (log.isTraceEnabled() && request.getSession(false) != null) {
if (log.isTraceEnabled()) {
log.trace("OIDC token is null. Can't perform auto login");
}
return null;
} else {
if (log.isDebugEnabled()) {
log.debug("Perform auto login with OIDC token " + token.getTokenEssentials());
}
}
LiferayOpenIdConnectConfiguration configuration = LiferayOpenIdConnectConfiguration.getConfiguration(request);
long companyId = PortalUtil.getCompanyId(request);

View File

@ -13,6 +13,7 @@ import com.liferay.portal.kernel.events.Action;
import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.User;
public class PostLoginAction extends Action {
@ -25,20 +26,25 @@ public class PostLoginAction extends Action {
log.info("PostLoginAction invoked");
}
JWTToken token = JWTTokenUtil.getOIDCFromRequest(request);
HttpSession session = request.getSession();
HttpSession session = request.getSession(false);
if (token != null && session != null) {
if (log.isTraceEnabled()) {
log.trace("Session details: id=" + session.getId() + ", instance=" + session);
}
User user = (User) session.getAttribute("USER");
User user = (User) session.getAttribute(WebKeys.USER);
if (user != null) {
log.info("Setting OIDC token in proxy");
JWTCacheProxy.getInstance().setOIDCToken(user, session, token);
log.info("Setting OIDC token in proxy for user " + user.getScreenName() + " and session "
+ session.getId());
JWTCacheProxy.getInstance().setOIDCToken(user, session.getId(), token);
} else {
log.error("User object not found in session");
log.error("User object not found in session " + session.getId() + " ["
+ Integer.toHexString(session.hashCode()) + "]");
}
} else {
if (token == null) {
log.error("OIDC token object is null in request");
}
if (session == null) {
log.error("Session is null");
}
log.info("Setting OIDC token in session");
JWTTokenUtil.putOIDCInSession(token, session);
}
String redirect = (String) request.getAttribute(OpenIdConnectLoginFilter.REDIRECT_ATTRIBUTE);
if (redirect != null) {

View File

@ -11,6 +11,7 @@ import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.events.SessionAction;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.User;
public class SessionDestroyAction extends SessionAction {
@ -20,13 +21,13 @@ public class SessionDestroyAction extends SessionAction {
@Override
public void run(HttpSession session) throws ActionException {
if (log.isTraceEnabled()) {
log.trace("Session details: id=" + session.getId() + ", instance=" + session);
log.trace("Session details " + session.getId() + " [" + Integer.toHexString(session.hashCode()) + "]");
}
User user = (User) session.getAttribute("USER");
User user = (User) session.getAttribute(WebKeys.USER);
LiferayOpenIdConnectConfiguration configuration = LiferayOpenIdConnectConfiguration.getConfiguration();
if (configuration.logoutOnPortalLogout()) {
// Getting the token from the cache proxy because it can be changed due to the (multiple) refresh
JWTToken token = JWTCacheProxy.getInstance().getOIDCToken(user, session);
JWTToken token = JWTCacheProxy.getInstance().getOIDCToken(user, session.getId());
if (token != null) {
if (log.isDebugEnabled()) {
log.debug("Performing logout on OIDC server due to session destroy for user: "
@ -41,18 +42,20 @@ public class SessionDestroyAction extends SessionAction {
throw new ActionException("Performing logut on OIDC server", e);
}
} else {
log.warn("Cannot find the OIDC token in session");
log.warn("Cannot find the OIDC token in session " + session.getId() + " ["
+ Integer.toHexString(session.hashCode()) + "]");
}
} else {
if (log.isDebugEnabled()) {
log.debug("Don't perform OIDC logout according to configuration");
log.debug("Don't perform OIDC logout according to configuration for user: " + user.getScreenName());
}
}
if (log.isDebugEnabled()) {
log.debug("Removing OIDC tokens from cache proxy");
log.debug("Removing OIDC tokens from cache proxy for user " + user.getScreenName() + " and session "
+ session.getId());
}
JWTCacheProxy.getInstance().removeAllOIDCTokens(user);
JWTCacheProxy.getInstance().removeAllUMATokens(user);
JWTCacheProxy.getInstance().removeOIDCToken(user, session.getId());
JWTCacheProxy.getInstance().removeUMAToken(user, session.getId());
}
}