Используя только keycloak-authz-client (6.0.1) (без Spring Security), мне нужно читать информацию о пользователях и группы пользователей у моего поставщика услуг.
После получения правильного токена доступа, благодаряAuthzClient, я смог получить доступ к API пользовательской информации:
UriBuilder target = UriBuilder.fromUri(kcURL);
target.path("realms/{realm}/protocol/openid-connect/userinfo")
.resolveTemplate("realm", this.realm);
UserInfoOIDC info = new UserInfoOIDC();
try {
UserInfo response = this.buildBearerInvocation(target, accessToken).get(UserInfo.class);
info.setName(response.getName());
info.setUsername(response.getPreferredUsername());
info.setCompleted(true);
log.info("User info successfully retrieved from {}", this.realm);
} catch (WebApplicationException e) {
log.error("User info failure on {}: {}", this.realm, e.getMessage());
}
...
private Invocation.Builder buildBearerInvocation(UriBuilder target, String accessToken) {
WebTarget webTarget = restClient.target(target);
Invocation.Builder builder = webTarget.request(APPLICATION_JSON)
.header(AUTHORIZATION, "Bearer " + accessToken);
return builder;
}
Но я не смог получить доступ к "API администратора":
UriBuilder target = UriBuilder.fromUri(kcURL);
target.path("admin/realms/" + this.realm);
target.path("users/" + userId);
target.path("groups");
try {
return this.buildBearerInvocation(target, accessToken)
.get(GroupRepresentation.class);
} catch (WebApplicationException e) {
log.error("User groups failure on realms {}: {}", this.realm, e.getMessage());
}
[main] INFO com.LoggingFilter -Обработка http://localhost:8080/auth/admin/realms/TestRealm/users/0f443554-01d0-4b40-a652-0c8c174632d4/groups [main] ОШИБКА com.KeycloakProvider - Ошибка групп пользователей в сферах TestRealm: HTTP 403 Forbidden
Мне интересно, может ли это быть просто из-за недостаточных прав доступа пользователя или скорее из CORSпроблема здесь (я добавил "127.0.0.1 localhost-auth" в мой файл etc / hosts, хотя не уверен, что это могло бы здесь помочь).Как я могу открыть «API администратора» для пользователя, больше настроек CORS или какую-либо особую роль для пользователя?
EDITED - клиент администратора Keycloak здесь не поможет (HTTP 403 также запрещен):
@Test
public void checkKeycloakAdminClient() {
Keycloak client = KeycloakBuilder.builder()
.serverUrl(url)
.realm(realm)
.username(adminUsername)
.password(adminPassword)
.clientId(clientId)
.clientSecret(clientSecret)
.build();
RealmResource realmResource = client.realm(realm);
UsersResource usersResource = realmResource.users();
List<UserRepresentation> users = usersResource.search(username);
}