diff --git a/services/src/main/java/org/keycloak/services/resources/IdentityBrokerService.java b/services/src/main/java/org/keycloak/services/resources/IdentityBrokerService.java index b2a11bb1d6..5f9501ecc3 100644 --- a/services/src/main/java/org/keycloak/services/resources/IdentityBrokerService.java +++ b/services/src/main/java/org/keycloak/services/resources/IdentityBrokerService.java @@ -323,7 +323,7 @@ public class IdentityBrokerService { federatedUser.addRequiredAction(UPDATE_PROFILE); } } catch (Exception e) { - return redirectToErrorPage(e.getMessage(), e); + return redirectToLoginPage(e, clientCode); } } @@ -447,6 +447,20 @@ public class IdentityBrokerService { return Flows.forwardToSecurityFailurePage(this.session, this.realmModel, this.uriInfo, message); } + private Response redirectToLoginPage(Throwable t, ClientSessionCode clientCode) { + String message = t.getMessage(); + + if (message == null) { + message = "Unexpected error when authenticating with identity provider"; + } + + fireErrorEvent(message); + return Flows.forms(this.session, this.realmModel, clientCode.getClientSession().getClient(), this.uriInfo) + .setClientSessionCode(clientCode.getCode()) + .setError(message) + .createLogin(); + } + private Response badRequest(String message) { fireErrorEvent(message); return Flows.errors().error(message, Status.BAD_REQUEST);