我正在使用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
我缺少一些配置吗?还是一个错误?
谢谢
答案 0 :(得分:0)
当我尝试使用服务客户端(使用客户端凭据)为现有用户分配角色时,我遇到了同样的问题。
解决办法: 转到客户 > 选择“您的”客户 > 转到“服务帐户角色”选项卡 > 选择客户角色:“领域管理”并添加“视图-领域”进入分配的角色。
就是这样:)