Ошибка 403 доступа к API администратора / групп OIDC из Keycloak - PullRequest
0 голосов
/ 27 мая 2019

Используя только 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);
    }

1 Ответ

0 голосов
/ 28 мая 2019

Назначьте все доступные клиентские роли "view -..." и "query -..." из клиента области "realm-management" пользователю-администратору (см. Сопоставления пользователя / роли).

...