【问题标题】:KeyCloak - Create Realms/Users/Groups Programmatically?KeyCloak - 以编程方式创建领域/用户/组?
【发布时间】:2019-01-02 10:53:14
【问题描述】:

我们决定将身份和访问管理解决方案转移到 KeyCloak,而不是完全在我们的 Java EE Web 应用程序中实施。我们正在创建一个多租户解决方案,并且更愿意通过我们的工作流程以编程方式创建安全领域/用户/组,而不是利用 KeyCloak 的自助注册功能或 Web UI,以便我们可以执行诸如获取信用卡详细信息以进行付款之类的操作等。我知道我们可能会利用admin REST APIs 来完成此任务,但我不确定除了手动编码 REST 调用之外是否还有更简单的方法。 KeyCloak 是否提供我们可以使用的管理客户端库?还是我们自己为管理 API 实现了一个 REST 客户端?

【问题讨论】:

    标签: java rest jakarta-ee keycloak keycloak-services


    【解决方案1】:

    我在KeyCloak Java Admin Client 周围找到了一些信息。 This gist 有很多有用的示例展示如何管理用户、领域等。

    【讨论】:

    • 您是否找到有关该 API 的任何文档?
    • 仅供参考,gist url 现在已损坏
    【解决方案2】:
    Keycloak kc = KeycloakBuilder.builder() 
                .serverUrl("https://localhost:8443/auth")
                .realm("master")
                .username("admin") 
                .password("admin") 
                .clientId("Mycli") 
                .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build()) 
                .build();
    
        CredentialRepresentation credential = new CredentialRepresentation();
        credential.setType(CredentialRepresentation.PASSWORD);
        credential.setValue("test123");
    
        UserRepresentation user = new UserRepresentation();
        user.setUsername("testuser2");
        user.setFirstName("Test2");
        user.setLastName("User2");
        user.setEmail("aaa@bbb.com");
        user.setCredentials(Arrays.asList(credential));
        user.setEnabled(true);
        user.setRealmRoles(Arrays.asList("admin"));
    
        // Create testuser
        Response result = kc.realm("my-realem").users().create(user);
        if (result.getStatus() != 201) {
            System.err.println("Couldn't create user.");
            System.exit(0);
        }else{
            System.out.println("Testuser created.... verify in keycloak!");
        }
    

    【讨论】:

      【解决方案3】:

      Keycloak Java adapters 专注于使用而不是配置。您需要实现自己使用所需参数进行必要的调用。有一种工具可以解决这种问题,admin-cli,但我认为它对您的情况没有用处。

      【讨论】:

        【解决方案4】:

        您可以使用 Keycloak Java admin REST api 客户端执行此操作:

        1. 为您的项目添加依赖项:

          • 马文
          <dependency>
              <groupId>org.keycloak</groupId>
              <artifactId>keycloak-admin-client</artifactId>
              <version>15.0.2</version>
          </dependency> 
          
          • 分级
          implementation 'org.keycloak:keycloak-admin-client:15.0.2'
          
        2. 使用KeycloakBuilder 创建Keycloak 的实例,使用管理员用户和默认admin-cli 客户端的密码身份验证:

        Keycloak keycloak = KeycloakBuilder.builder()
                    .serverUrl("http://localhost:8081/auth")
                    .realm("master")
                    .clientId("admin-cli")
                    .username("admin")
                    .password("admin")
                    .build();
        
        1. 要创建新领域,请使用RealmRepresentation
        RealmRepresentation rr = new RealmRepresentation();
        rr.setId("test-realm");
        rr.setRealm("test-realm");
        rr.setEnabled(true);
        
        keycloak.realms().create(rr);
        
        1. 要创建新用户,请使用UserRepresentation
        CredentialRepresentation credential = new CredentialRepresentation();
        credential.setType(CredentialRepresentation.PASSWORD);
        credential.setValue("1234");
        
        UserRepresentation user = new UserRepresentation();
        user.setUsername("test");
        user.setFirstName("test");
        user.setLastName("test");
        user.setEmail("test@gmail.com");
        user.setCredentials(Arrays.asList(credential));
        user.setEnabled(true);
        user.setRealmRoles(Arrays.asList("admin"));
        
        keycloak.realm("test-realm").users().create(user);
        
        1. 要创建一个新组,请使用GroupRepresentation
        GroupRepresentation groupRepresentation = new GroupRepresentation()
        groupRepresentation.setName("group");
        
        Response response = keycloak.realm("test-realm").groups().add(groupRepresentation);
        

        请注意,在创建新的顶级组时,您不应传递组 id - 您可以在创建组后检索它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-08
          • 2019-11-06
          • 2016-07-02
          • 2012-01-12
          • 2019-07-21
          • 2017-08-30
          • 1970-01-01
          相关资源
          最近更新 更多