环境
keycloak 10.0.1
jdk 8.0
这里只是说明我的环境,用户可以自行搭配,问题不大
前言
这篇博客讲述的是往keycloak中的一个Realm(非Master Realm)导入用户,在Realm上需要去创建一个demo Client,再将这个demo Client的认证类型配置成confidential
再开启两个功能
创建一个具有管理用户权限的role
我这里第一张图是在Realm中创建了一个admin角色,第二张图是给admin角色分配一个manage-users的角色,也就是用户管理的权限。
创建一个用户并设置密码
图一我是创建了一个用户alice,图二是点进alice用户以后看到的界面,点击Credentials,进入到图三,给用户设置密码,这个特别注意红框框出来的位置,要将这个属性置成off,当这个作用开启的时候,会要求这个用户登录一次并修改密码才算这个用户有效,相当于创建这个用户以后需要激活才能使用,把这个属性置off以后,这个用户就已经可以使用,不需要登入激活操作。
将创建的角色映射给这个用户
使得这个用户拥有管理realm用户的权力
然后我们进入到给这个用户赋角色的部分,将admin角色赋给alice,这样alice就有管理用户的功能了。我们就可以使用alice这个用户去创建用户。
依赖
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>16.0.0-SNAPSHOT</version>
</dependency>
用户导入关键代码
/*
*导入用户
*/
public static void addUser(User user, UsersResource usersResource)
{
CredentialRepresentation credentialRepresentation = createPasswordCredentials(user.getPassword());
UserRepresentation reUser = new UserRepresentation();
reUser.setCredentials(Collections.singletonList(credentialRepresentation));
reUser.setUsername(user.getUsername());
reUser.setFirstName(user.getFirstName());
reUser.setLastName(user.getLastName());
reUser.setEmail(user.getEmail());
reUser.setEmailVerified(false);
reUser.setEnabled(true);
Response re = usersResource.create(reUser);
System.out.println(re.toString());
}
/*
* 获得keycloak实例
*/
public static Keycloak getKeycloak(String url, String realm, String username, String password, String clientId, String clientSecret)
{
Keycloak keycloak = KeycloakBuilder.builder()
.serverUrl(url)
.realm(realm)
.grantType(OAuth2Constants.PASSWORD)
.username(username)
.password(password)
.clientId(clientId)
.clientSecret(clientSecret)
.resteasyClient(new ResteasyClientBuilder()
.connectionPoolSize(10)
.build()
)
.build();
return keycloak;
}
/*
*密码设置
*/
public static CredentialRepresentation createPasswordCredentials(String password)
{
CredentialRepresentation passwordCredentials = new CredentialRepresentation();
passwordCredentials.setTemporary(false);
passwordCredentials.setType(CredentialRepresentation.PASSWORD);
passwordCredentials.setValue(password);
return passwordCredentials;
}
调用实例
public static void testAddUser()
{
Keycloak keycloak = getKeycloak(
"http://localhost:8080/auth/",//url
"user-import",//realm name
"alice","alice", //具有用户管理权限的用户
"demo", //clientid
"b6d5f0f0-6d89-4c72-8db0-d09b8854b1f5"//client secret
);
List<User> users = getUsers();//从数据库中获取用户数据
UsersResource usersResource = keycloak.realm("user-import").users();
for(User user:users)
addUser(user, usersResource);//开始导入
}
参考资料:
用户管理角色的创建过程:https://newbedev.com/cannot-create-user-in-the-keycloak-getting-403-status
Spring boot 创建keycloak用户https://medium.com/chain-analytica/keycloak-create-users-for-a-realm-in-spring-boot-3eff924a8db1