【问题标题】:Can we add users to keycloak in realms other than 'master'?我们可以在“master”以外的领域将用户添加到 keycloak 中吗?
【发布时间】:2019-02-27 10:17:17
【问题描述】:

我可以将用户添加到 keycloak,但只能在主域中。有没有办法将用户添加到 master 之外的其他领域?

我尝试并收到了 HTTP 401 未经授权的异常。

【问题讨论】:

  • 在添加新用户或对新用户进行身份验证时出现 401?

标签: http exception keycloak


【解决方案1】:

听起来您的用户在其他领域没有manage-users 角色。

只需转到管理领域,查找您的用户,导航到 Role mappings 选项卡,然后在 Client Roles 下拉列表中选择正确的领域,然后添加 manage-users 作为角色。对所有领域重复。

【讨论】:

  • 即使在我的主域中,我也根本看不到管理用户角色。我看到了管理员角色,但是这个角色在其他领域似乎不可用。
  • @user840930 你用的是哪个keycloak版本?
【解决方案2】:
//Here's how I created a user to my realm using Java 

@Override
public UserDto registerNewUserAccount(final UserDto accountDto) {
    String keycloakPassword = accountDto.getPassword();

    accountDto.setPassword(passwordEncoder.encode(accountDto.getPassword()));
    accountDto.setEnabled(1);
    UserDto user = userRepository.save(accountDto);

    AuthorityDto role = new AuthorityDto();
    role.setUserName(accountDto.getLogin());
    role.setAuthority("ROLE_USER");

    authorityRepository.save(role);

    Keycloak kc = Keycloak.getInstance(
            "https://www.zdslogic.com/keycloak/auth",  /your server
            "zdslogic",  //your realm
            "richard.campion", //user 
            "Changit", //password
            "admin-cli"); //client


    CredentialRepresentation credential = new CredentialRepresentation();
    credential.setType(CredentialRepresentation.PASSWORD);
    credential.setValue(keycloakPassword);

    UserRepresentation keycloakUser = new UserRepresentation();
    keycloakUser.setUsername(accountDto.getLogin());
    keycloakUser.setFirstName(accountDto.getFirstName());
    keycloakUser.setLastName(accountDto.getLastName());
    keycloakUser.setEmail(accountDto.getEmail());
    keycloakUser.setCredentials(Arrays.asList(credential));
    keycloakUser.setEnabled(true);
    keycloakUser.setRealmRoles(Arrays.asList("user"));

    // Get realm
    RealmResource realmResource = kc.realm("zdslogic");
    UsersResource usersRessource = realmResource.users();

    // Create Keycloak user
    Response result = null;
    try {
        result = usersRessource.create(keycloakUser);
    } catch(Exception e) {
        System.out.println(e);
    }

    if (result==null || result.getStatus() != 201) {
        System.err.println("Couldn't create Keycloak user.");
    }else{
        System.out.println("Keycloak user created.... verify in keycloak!");
    }

    return user;

}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 2019-11-03
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2021-07-15
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多