diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/security/saml/SamlAssertionConsumerServlet.java b/openmetadata-service/src/main/java/org/openmetadata/service/security/saml/SamlAssertionConsumerServlet.java index 2bc6a9cbd2b..516ba6d54e8 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/security/saml/SamlAssertionConsumerServlet.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/security/saml/SamlAssertionConsumerServlet.java @@ -130,17 +130,22 @@ public class SamlAssertionConsumerServlet extends HttpServlet { // Redirect with JWT Token String redirectUri = (String) req.getSession().getAttribute(SESSION_REDIRECT_URI); String url = - redirectUri - + "?id_token=" - + jwtAuthMechanism.getJWTToken() - + "&email=" - + nameId - + "&name=" - + username; + String.format( + "%s?id_token=%s&email=%s&name=%s", + (nullOrEmpty(redirectUri) ? buildBaseRequestUrl(req) : redirectUri), + jwtAuthMechanism.getJWTToken(), + nameId, + username); resp.sendRedirect(url); } } + private String buildBaseRequestUrl(HttpServletRequest req) { + // In case of IDP initiated one it needs to be built on fly, since the session might not exist + return String.format( + "%s://%s:%s/saml/callback", req.getScheme(), req.getServerName(), req.getServerPort()); + } + private JwtResponse getJwtResponseWithRefresh( User storedUser, JWTAuthMechanism jwtAuthMechanism) { RefreshToken newRefreshToken = TokenUtil.getRefreshToken(storedUser.getId(), UUID.randomUUID());