检索角色详细信息时,Keycloak Java客户端403

时间:2020-01-07 21:28:47

标签: keycloak

我正在使用keycloak 8.0.1,它是Java客户端keycloak-admin-client库。

这是我的Keycloak配置

public Keycloak keycloakClient(AdapterConfig config) {
    return KeycloakBuilder.builder()
            .clientId(config.getResource())
            .clientSecret((String) config.getCredentials().get(CredentialRepresentation.SECRET))
            .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
            .realm(config.getRealm())
            .serverUrl(config.getAuthServerUrl())
            .build();
}

使用此代码,我想创建用户并为其分配角色

final UserRepresentation user = createUserRepresentation(data);
final UsersResource userResource = getRealmResource().users();
try (Response response = userResource.create(user)) {
    if (response.getStatusInfo().getFamily().equals(Response.Status.Family.SUCCESSFUL)) {
        final String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");
        final RolesResource rolesResource = getRealmResource().roles();
        final RoleResource roleResource = rolesResource.get(data.getRole().getRemoteName());
        final RoleRepresentation role = roleResource.toRepresentation();
        userResource.get(userId).roles().realmLevel().add(Collections.singletonList(role));
        return userId;
    } else {
        throw new IllegalStateException("Unable to create user " + response.getStatusInfo().getReasonPhrase());
    }
}

但是它在第final RoleRepresentation role = roleResource.toRepresentation();行失败,并显示消息javax.ws.rs.ForbiddenException: HTTP 403 Forbidden

我不明白为什么会出现此错误,因为我的客户分配了realm-management客户

的所有角色
create-client
impersonation
manage-authorization
manage-clients
manage-events
manage-identity-providers
manage-realm
manage-users
query-clients
query-groups
query-realms
query-users
realm-admin
view-authorization
view-clients
view-events
view-identity-providers
view-realm
view-users

我缺少一些配置吗?还是一个错误?

谢谢

1 个答案:

答案 0 :(得分:0)

当我尝试使用服务客户端(使用客户端凭据)为现有用户分配角色时,我遇到了同样的问题。

解决办法: 转到客户 > 选择“您的”客户 > 转到“服务帐户角色”选项卡 > 选择客户角色:“领域管理”并添加“视图-领域”进入分配的角色。

就是这样:)