我是 Keycloak 的新手,正在尝试弄清楚如何使用Keycloack 管理客户端正确注册用户
文档中没有具体的例子,并且缺少大量屏幕截图,从而产生了歧义。
我找到了两个基于 JAVA 的示例,它们提供了一些有关 API 调用应如何工作的见解:这里和这里,但每次我尝试创建用户或查看领域表示时,我都会遇到 jakarta.ws.rs.NotFoundException:HTTP 404 Not Found。有什么帮助可以解释为什么会发生这种情况吗?
我已经创建了客户端凭证客户端,并分配了以下角色以便能够管理用户(创建、删除、修改)。
我能够使用 POSTMAN 中的客户端凭证流从令牌端点接收令牌
下面你会发现 Java 调用
private Keycloak getAdminKeycloak() {
this.base = environment.getProperty(MyConstants.KEYCLOAK_TOKEN_END_POINT);
this.realm = environment.getProperty(MyConstants.KEYCLOAK_REALM);
this.username = environment.getProperty(MyConstants.KEYCLOAK_SERVER_API_CLIENTID);
this.password = environment.getProperty(MyConstants.KEYCLOAK_SERVICE_API_SECRET);
return KeycloakBuilder.builder().serverUrl(base)
.realm(realm)
.grantType(OAuth2Constants.CLIENT_CREDENTIALS)
.clientId(username)
.clientSecret(password).build();
}
@Override
public ResponseEntity<String> registerUser(User user) {
Keycloak keycloak = getAdminKeycloak();
// set user representation
UserRepresentation newuser = new UserRepresentation();
newuser.setEmail(user.getEmail());
newuser.setFirstName(user.getFirstName());
newuser.setLastName(user.getLastName());
newuser.setEnabled(true);
// Get realm
RealmResource realmResource = keycloak.realm(realm);
System.out.print(realmResource.toRepresentation().toString());
UsersResource usersResource = realmResource.users();
ArrayList<UserRepresentation> users = (ArrayList<UserRepresentation>) usersResource.list();
// create user
Response response = usersResource.create(newuser);
String userID = CreatedResponseUtil.getCreatedId(response);
if (userID == null || userID.isEmpty()) {
return new ResponseEntity<>(MyConstants.ERROR_OCCURED, HttpStatus.METHOD_FAILURE);
}
// set credentials
CredentialRepresentation passwordCred = new CredentialRepresentation();
passwordCred.setTemporary(false);
passwordCred.setType(CredentialRepresentation.PASSWORD);
passwordCred.setValue(user.getPassword());
UserResource userResource = usersResource.get(userID);
userResource.resetPassword(passwordCred);
return new ResponseEntity<>(MyConstants.REGISTRATION_COMPLETE, HttpStatus.OK);
}
要求
Maven 3.9.9 和 Java 17
有关 keycloak docker 启动的更多详细信息请参见此处
Keycloak 使用 docker compose 和版本 23.0.7
docker-compose.yml
设置客户端 ID/密码和管理员用户角色
更多详细信息请见此处获取主令牌
通过 curl 测试客户端令牌
Java 代码
文件树
主要代码
KeycloakUserRegistrationApplication.java
KeycloakUserService.java
应用程序.属性
用户.java
pom.xml
编译并运行
结果 - 用户创建
仅使用 my-realm 进行更新
KeycloakUserService.java
应用程序.属性