Java API 将数据库中的用户导入keycloak

环境

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值