🌑

帮帮技术站

keycloak18使用4-通过keycloak-admin-client客户端创建用户

通过keycloak-admin-client客户端创建用户

  1. 引用客户端

    1
    implementation group: 'org.keycloak', name: 'keycloak-admin-client', version: '18.0.0'
  2. 第一种 客户端模式获取管理token

1
2
3
4
5
6
7
8
9
10
11
12
Keycloak kc = KeycloakBuilder.builder()
.serverUrl("http://localhost:8080")
.realm("jiliapp.cn")
.clientId("realm-management")
.clientSecret("D2x5Wf5yZDt4eYPdykUguy6A7GNUKiQ7")
.grantType(OAuth2Constants.CLIENT_CREDENTIALS)
.resteasyClient(
new ResteasyClientBuilder()
.connectionPoolSize(10).build()
)
.build();

*注意 serverUrl在18.0.0后,只要到域名端口就行.不要在后面加 /auth

  1. Keycloak后台设置,必须添加这个client客户端角色 才会有权限管理用户.

Keycloak后台设置

*** 启用服务账户
启用服务账户

  1. 第二种 账户密码方式 获取管理token
    // 第二种方式 ok 需要users赋予权限manage-users和client设置好直接访问模式(password模式)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Keycloak kc = KeycloakBuilder.builder() //
    .serverUrl("http://localhost:8080")
    .realm("jiliapp.cn")
    .grantType(OAuth2Constants.PASSWORD) //
    .clientId("realm-management")
    .clientSecret("D2x5Wf5yZDt4eYPdykUguy6A7GNUKiQ7")
    .username("usersmanager") //
    .password("qw123") //
    .build();

    第二种获取token方式 需要2步骤
    第一步 需要创建用户usersmanager/qw123 省略
    第二步 对创建的账户分类client权限

对创建的账户分类client权限

*还需要打开应用直接访问模式,不然会400错误
打开应用直接访问模式

  1. 代码模式创建用户
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     CredentialRepresentation credential = new CredentialRepresentation();
    credential.setType(CredentialRepresentation.PASSWORD);
    credential.setValue(password);
    credential.setTemporary(false);
    List<CredentialRepresentation> credentials = new ArrayList<>();
    credentials.add(credential);

    UserRepresentation user = new UserRepresentation();
    // 设置用户名
    user.setUsername(username);
    // 设置用户凭据,即密码
    user.setCredentials(Collections.singletonList(credential));
    // 设置启用该用户,接下来还可以设置角色等等
    user.setEnabled(true);
    user.setFirstName(username);//名称
    user.setLastName("jiliapp.cn");//姓
    user.setEmail(username+"@jiliapp.cn");

    try {
    RealmResource realm = kc.realm(realmName);
    UsersResource users = realm.users();
    // users.list().stream().forEach(new Consumer<UserRepresentation>() {
    // @Override
    // public void accept(UserRepresentation userRepresentation) {
    // logger.info("userRepresentation:{}",userRepresentation.getUsername());
    // }
    // });
    // Create user (requires manage-users role)
    Response response=users.create(user);
    //409 已经存在
    //201 创建成功
    System.out.printf("Repsonse: %s %s%n", response.getStatus(), response.getStatusInfo());
    System.out.println(response.getLocation());
    if (response.getStatus()==Response.Status.CREATED.getStatusCode()){
    String userId = CreatedResponseUtil.getCreatedId(response);
    return Rsp.success(response.getEntity());
    }else{
    return Rsp.ret(response.getStatus(),response.getStatusInfo().getReasonPhrase());
    }
    }catch (Exception e) {
    e.printStackTrace();
    return Rsp.failed(e.getMessage());
    }

注意

  1. 用户名和邮箱名称唯一,不然状态返回409 账号重复
  2. 创建成功返回状态为201,不是200
  3. 一般使用第一种方式管理用户

— Oct 11, 2022

Search