Fehler bei der Registrierung des Benutzers in Schlüsselklok: Benutzername erforderlich, während die KeyCloak -Administra
Posted: 05 Feb 2025, 11:25
Problem:
Wenn ich versuche, einen Benutzer zu registrieren, indem ich eine Postanforderung an den Endpunkt/Register mit einer Nutzlast wie folgt sende:
Wenn ich versuche, einen Benutzer zu registrieren, indem ich eine Postanforderung an den Endpunkt/Register mit einer Nutzlast wie folgt sende:
Code: Select all
{
"username": "asas",
"email": "asas@gmail.com",
"password": "asas"
}
< /code>
Das System schlägt fehl und der folgende Fehler ist protokolliert: < /p>
2025-02-05T15:36:28.299+07:00 INFO 42339 --- [auth-service] [nio-8081-exec-1] o.f.user.controller.AuthController : Received registration request for username: asas
2025-02-05T15:36:28.299+07:00 INFO 42339 --- [auth-service] [nio-8081-exec-1] o.f.user.listener.AuthEventListener : Processing user registration for username: asas
2025-02-05T15:36:28.300+07:00 ERROR 42339 --- [auth-service] [nio-8081-exec-1] o.f.user.listener.AuthEventListener : Error registering user in Keycloak: username required
< /code>
[b] Was ich ausprobiert habe: < /strong> < /p>
Überprüft den Nutzlast - den Benutzernamen, E -Mail und Passwort werden korrekt in der Anforderungsbehörde übergeben. /> Überprüft das Schlüsselkloak -Admin -API > Code [/b]
[b] Konfiguration: [/b]
keycloak:
realm:
auth-server-url: http://localhost:9090/
resource:
credentials:
client-id:
secret:
use-resource-role-mappings: true
< /code>
authController: < /p>
@RestController
@RequestMapping("/api/v1/auth")
@RequiredArgsConstructor
public class AuthController {
private final AuthEventListener userEventListener;
private static final Logger logger = LoggerFactory.getLogger(AuthController.class);
@PostMapping("/register")
public ResponseEntity register(@RequestBody UserRegisteredEvent event) {
logger.info("Received registration request for username: {}", event.getUsername());
return userEventListener.handleUserRegistration(event);
}
@PostMapping("/login")
public ResponseEntity login(@RequestBody UserLoginEvent event) {
return userEventListener.handleUserLogin(event);
}
}
< /code>
AuthEventListener: < /p>
@Service
@RequiredArgsConstructor
public class AuthEventListener {
private final KafkaTemplate userRegisteredTemplate;
private final AuthService authService;
private static final Logger logger = Logger.getLogger(AuthEventListener.class.getName());
@KafkaListener(topics = "user-registration", groupId = "auth-service")
public ResponseEntity handleUserRegistration(UserRegisteredEvent event) {
logger.info("Processing user registration for username: " + event.getUsername());
try {
authService.registerUser(event.getUsername(), event.getEmail(), event.getPassword());
userRegisteredTemplate.send("user-registered", event);
logger.info("User successfully registered in Keycloak: " + event.getUsername());
} catch (Exception e) {
logger.severe("Error registering user in Keycloak: " + e.getMessage());
}
return ResponseEntity.ok().build();
}
}
< /code>
AuthService: < /p>
@Service
@RequiredArgsConstructor
public class AuthService {
@Value("${keycloak.auth-server-url}")
private String keycloakAuthServerUrl;
@Value("${keycloak.realm}")
private String keycloakRealm;
@Value("${keycloak.credentials.client-id}")
private String keycloakClientId;
@Value("${keycloak.credentials.secret}")
private String keycloakClientSecret;
private static final Logger logger = Logger.getLogger(AuthService.class.getName());
private Keycloak getAdminKeycloakInstance() {
return KeycloakBuilder.builder()
.serverUrl(keycloakAuthServerUrl)
.realm(keycloakRealm)
.clientId(keycloakClientId)
.clientSecret(keycloakClientSecret)
.build();
}
public void registerUser(String username, String email, String password) {
Keycloak keycloak = getAdminKeycloakInstance();
RealmResource realmResource = keycloak.realm(keycloakRealm);
UsersResource usersResource = realmResource.users();
UserRepresentation user = new UserRepresentation();
user.setUsername(username);
user.setEmail(email);
user.setEnabled(true);
Response response = usersResource.create(user);
if (response.getStatus() != 201) {
throw new RuntimeException("Failed to create user in Keycloak: " + response.getStatusInfo());
}
String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");
CredentialRepresentation credential = new CredentialRepresentation();
credential.setTemporary(false);
credential.setType(CredentialRepresentation.PASSWORD);
credential.setValue(password);
keycloak.realm(keycloakRealm).users().get(userId).resetPassword(credential);
RoleRepresentation userRole = realmResource.roles().get("user").toRepresentation();
keycloak.realm(keycloakRealm).users().get(userId)
.roles().realmLevel().add(Collections.singletonList(userRole));
logger.info("User successfully registered in Keycloak: " + username);
}
}