Always get 404 when calling keycloak create User in Spring boot via Loadbalancer

Viewed 21

I have the following situation. I have implemented in a Spring Boot application a user management system using keycloak. Its working perfectly fine on my test systems. Only in Production I always get an 404 error when trying to create a keylcoak user.

com.example.solar.frontend.usecase.exceptions.KeycloakException: Error creating Keycloak user. Get Response 404
Sep 14 08:34:08 solar[23098]: at com.example.solar.frontend.adapter.outgoing.KeycloakUserService.createUser(KeycloakUserService.java:59) ~[classes!/:0.0.4]

This is my service:

public class KeycloakUserService implements UserService {

private final RealmResource realmResource;

@Autowired
public KeycloakUserService(KeycloakProvider keycloakProvider, @Value("${keycloak.realm}") String realm) {

    realmResource = keycloakProvider.keycloak().realm(realm);
}

public String createUser(KeycloakUserRequest userRequest) throws KeycloakException {

    UsersResource usersResource = realmResource.users();
    CredentialRepresentation credentialRepresentation = createPasswordCredentials(userRequest.getPassword());

    UserRepresentation kcUser = new UserRepresentation();
    kcUser.setUsername(userRequest.getUsername());
    kcUser.setCredentials(Collections.singletonList(credentialRepresentation));
    kcUser.setFirstName(userRequest.getFirstname());
    kcUser.setLastName(userRequest.getLastname());
    kcUser.setEmail(userRequest.getEmail());
    kcUser.setEnabled(true);
    kcUser.setEmailVerified(false);

    Response response = usersResource.create(kcUser);

    if (response.getStatus() == HttpStatus.SC_CREATED) {

        String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");
        log.info("Successfully created user in Keycloak userId: {}, email: {}, firstname: {}, lastname: {}", userId,
                kcUser.getEmail(), kcUser.getFirstName(), kcUser.getLastName());
        return userId;
    } else {
        throw new KeycloakException("Error creating Keycloak user. Get Response " + response.getStatus() + " " + response.getStatusInfo().getReasonPhrase());
    }
}

This is my configuration in application.properties:

keycloak.realm=<realm>
keycloak.auth-server-url=http://<loadbalancer-keycloak-url>/auth/
keycloak.resource=solar
keycloak.credentials.secret=<secret>

This config is working on dev perfectly, but there I calling keycloak auth url directly instead over a loadbalancer. (http protocol is correct). Calling the url via browser, the keycloak admin index page is returned, so url is correct.

Any idea, which config I am missing, or what else I can do?

best regards Michael

0 Answers
Related