diff --git a/pom.xml b/pom.xml index fabe70b..a091e2c 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ UTF-8 UTF-8 - 26.1.5 + 26.2.5 4.8.3.1 3.4.1 diff --git a/src/main/java/nl/first8/keycloak/services/resources/IdentityBrokerService.java b/src/main/java/nl/first8/keycloak/services/resources/IdentityBrokerService.java index 21998ab..cb63848 100644 --- a/src/main/java/nl/first8/keycloak/services/resources/IdentityBrokerService.java +++ b/src/main/java/nl/first8/keycloak/services/resources/IdentityBrokerService.java @@ -279,7 +279,7 @@ public Response clientInitiatedAccountLinking(@PathParam("provider_alias") Strin event.success(); try { - IdentityProvider identityProvider = getIdentityProvider(session, realmModel, providerAlias); + IdentityProvider identityProvider = getIdentityProvider(session, providerAlias); Response response = identityProvider.performLogin(createAuthenticationRequest(identityProvider, providerAlias, clientSessionCode)); if (response != null) { @@ -330,14 +330,14 @@ public Response performLogin(@PathParam("provider_alias") String providerAlias, ClientSessionCode clientSessionCode = new ClientSessionCode<>(session, realmModel, authSession); clientSessionCode.setAction(AuthenticationSessionModel.Action.AUTHENTICATE.name()); - IdentityProviderModel identityProviderModel = realmModel.getIdentityProviderByAlias(providerAlias); + IdentityProviderModel identityProviderModel = session.identityProviders().getByAlias(providerAlias); if (identityProviderModel == null) { throw new IdentityBrokerException("Identity Provider [" + providerAlias + "] not found."); } if (identityProviderModel.isLinkOnly()) { throw new IdentityBrokerException("Identity Provider [" + providerAlias + "] is not allowed to perform a login."); } - if (clientSessionCode != null && clientSessionCode.getClientSession() != null && loginHint != null) { + if (clientSessionCode.getClientSession() != null && loginHint != null) { clientSessionCode.getClientSession().setClientNote(OIDCLoginProtocol.LOGIN_HINT_PARAM, loginHint); } @@ -388,7 +388,7 @@ public Object getEndpoint(@PathParam("provider_alias") String providerAlias) { IdentityProvider identityProvider; try { - identityProvider = getIdentityProvider(session, realmModel, providerAlias); + identityProvider = getIdentityProvider(session, providerAlias); } catch (IdentityBrokerException e) { throw new NotFoundException(e.getMessage()); } @@ -441,7 +441,7 @@ private Response getToken(String providerAlias, boolean forceRetrieval) { } - IdentityProvider identityProvider = getIdentityProvider(session, realmModel, providerAlias); + IdentityProvider identityProvider = getIdentityProvider(session, providerAlias); IdentityProviderModel identityProviderConfig = getIdentityProviderConfig(providerAlias); if (identityProviderConfig.isStoreToken()) { @@ -494,7 +494,7 @@ public Response authenticated(BrokeredIdentityContext context) { context.getIdp().preprocessFederatedIdentity(session, realmModel, context); KeycloakSessionFactory sessionFactory = session.getKeycloakSessionFactory(); - realmModel.getIdentityProviderMappersByAliasStream(context.getIdpConfig().getAlias()).forEach(mapper -> { + session.identityProviders().getMappersByAliasStream(context.getIdpConfig().getAlias()).forEach(mapper -> { IdentityProviderMapper target = (IdentityProviderMapper) sessionFactory .getProviderFactory(IdentityProviderMapper.class, mapper.getIdentityProviderMapper()); target.preprocessFederatedIdentity(session, realmModel, mapper, context); @@ -506,7 +506,8 @@ public Response authenticated(BrokeredIdentityContext context) { this.event.event(EventType.IDENTITY_PROVIDER_LOGIN) .detail(Details.REDIRECT_URI, authenticationSession.getRedirectUri()) .detail(Details.IDENTITY_PROVIDER, providerAlias) - .detail(Details.IDENTITY_PROVIDER_USERNAME, context.getUsername()); + .detail(Details.IDENTITY_PROVIDER_USERNAME, context.getUsername()) + .detail(Details.IDENTITY_PROVIDER_BROKER_SESSION_ID, context.getBrokerSessionId()); UserModel federatedUser = this.session.users().getUserByFederatedIdentity(this.realmModel, federatedIdentityModel); boolean shouldMigrateId = false; @@ -831,7 +832,8 @@ private Response finishBrokerAuthentication(BrokeredIdentityContext context, Use authSession.setUserSessionNote(Details.IDENTITY_PROVIDER_USERNAME, context.getUsername()); event.detail(Details.IDENTITY_PROVIDER, providerAlias) - .detail(Details.IDENTITY_PROVIDER_USERNAME, context.getUsername()); + .detail(Details.IDENTITY_PROVIDER_USERNAME, context.getUsername()) + .detail(Details.IDENTITY_PROVIDER_BROKER_SESSION_ID, context.getBrokerSessionId()); if (isDebugEnabled()) { logger.debugf("Performing local authentication for user [%s].", federatedUser); @@ -1263,8 +1265,8 @@ private Response notFound(String message) { throw ErrorResponse.error(message, Response.Status.NOT_FOUND); } - public static IdentityProvider getIdentityProvider(KeycloakSession session, RealmModel realm, String alias) { - IdentityProviderModel identityProviderModel = realm.getIdentityProviderByAlias(alias); + public static IdentityProvider getIdentityProvider(KeycloakSession session, String alias) { + IdentityProviderModel identityProviderModel = session.identityProviders().getByAlias(alias); if (identityProviderModel != null) { IdentityProviderFactory providerFactory = getIdentityProviderFactory(session, identityProviderModel); @@ -1279,7 +1281,10 @@ public static IdentityProvider getIdentityProvider(KeycloakSession session, R throw new IdentityBrokerException("Identity Provider [" + alias + "] not found."); } - public static IdentityProviderFactory getIdentityProviderFactory(KeycloakSession session, IdentityProviderModel model) { + private static IdentityProviderFactory getIdentityProviderFactory(KeycloakSession session, IdentityProviderModel model) { + if (model == null) { + return null; + } return Stream.concat(session.getKeycloakSessionFactory().getProviderFactoriesStream(IdentityProvider.class), session.getKeycloakSessionFactory().getProviderFactoriesStream(SocialIdentityProvider.class)) .filter(providerFactory -> Objects.equals(providerFactory.getId(), model.getProviderId())) @@ -1289,7 +1294,7 @@ public static IdentityProviderFactory getIdentityProviderFactory(KeycloakSess } private IdentityProviderModel getIdentityProviderConfig(String providerAlias) { - IdentityProviderModel model = this.realmModel.getIdentityProviderByAlias(providerAlias); + IdentityProviderModel model = session.identityProviders().getByAlias(providerAlias); if (model == null) { throw new IdentityBrokerException("Configuration for identity provider [" + providerAlias + "] not found."); }