Keycloak/OIDC: получение атрибутов групп пользователей

Я извлек информацию о группах пользователей из конечной точки OIDC Keycloak, но они не поставляются с определенными мной АТРИБУТАМИ группы (см. вкладку «Атрибуты» в форме группы рядом с настройками). Есть ли претензия добавить к моему запросу?

Я использую клиент RESTeasy для доступа к API-интерфейсу администратора Keycloak (пока что результаты гораздо лучше, чем при использовании предоставленного клиента администратора):

@Path("/admin/realms/{realm}")
public interface KeycloakAdminService {
    @GET
    @Path("/users/{id}/groups")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    List<GroupRepresentation> getUserGroups(@PathParam("realm") String realm, @PathParam("id") String userId,
                                            @HeaderParam(AUTHORIZATION) String accessToken);
    //DEBUG the access token must always be prefixed by "Bearer "
}

Итак, я могу получить группы пользователей:

private void fetchUserGroups(UserInfoOIDC infos, String userId) {
    log.info("Fetching user groups from {}...", getRealm());
    try {
        KeycloakAdminService proxy = kcTarget.proxy(KeycloakAdminService.class);
        AccessTokenResponse response = authzClient.obtainAccessToken(getAdminUsername(), getAdminPassword());
        List<GroupRepresentation> groups = proxy.getUserGroups(getRealm(), userId,
                "Bearer " + response.getToken());
        infos.importUserGroups(groups); //DEBUG here we go!
    } catch (WebApplicationException e) {
        log.error("User groups failure on {}: {}", getRealm(), e.getMessage());
    }
}

Но когда дело доходит до исследования данных, оказывается, что в структуре GroupRepresentation#getAttributes нет никаких атрибутов.

Я читал, что претензии могут быть добавлены к запросам информации о пользователе. Работает ли это на API администратора? Как я могу добиться такого результата с помощью шаблонов RESTeasy? Спасибо

Я также прочитал это в документации Keycloak: «Группы управляют группами пользователей. Атрибуты могут быть определены для группы. Вы также можете сопоставить роли с группой. Пользователи, которые становятся членами группы, наследуют атрибуты и сопоставления ролей., которую определяет эта группа»; это значит, что я бы предпочел искать эти атрибуты непосредственно в информации о пользователе? Но они тоже не приходят, так что мой вопрос остается...

Thomas Escolan 29.05.2019 16:04

Извините, французские каникулы... Я попробую и сообщу вам как можно скорее

Thomas Escolan 03.06.2019 12:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
2
23 589
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я смог добиться этого, добавив информацию о группах/ролях в свойство токена другие претензии:

Для этого в конфигурации keycloak перейдите в свой клиент -> сопоставители и добавьте сопоставитель групп/ролей. Например.

Теперь эта информация начнет поступать в ваш токен доступа:

Чтобы получить доступ к этому групповому атрибуту в Java, вы можете извлечь его из свойства otherclaims токена доступа. Например.:

KeycloakSecurityContext keycloakSecurityContext = (KeycloakSecurityContext)(request.getAttribute(KeycloakSecurityContext.class.getName()));         
AccesToken token = keycloakSecurityContext.getToken();

На изображении ниже вы можете видеть, что свойство otherclaims токена заполнено атрибутом groups, который мы создали в keycloak. Обратите внимание, что если бы мы назвали «свойство требования токена» как groupXYZ, otherclaims отображалось бы: groupsXYZ=[Administrator]

Хорошо, я действительно мог бы получить все атрибуты групп в «другие утверждения», как вы сказали (на самом деле смешанные в одну запись «группы», но это не повредит для моего варианта использования) при запросе информации о пользователе API администратора (то есть в UserInfo, а не в AccessTokenResponse). Большое спасибо!

Thomas Escolan 03.06.2019 12:53

Мой плохой @tryingtolearn ... я получил НАЗВАНИЯ групп, НО мне нужны атрибуты моих групп!

Thomas Escolan 03.06.2019 13:50

Следует ли использовать группы для разрешений? Разве мы не должны использовать роли? Я не уверен в лучшем подходе к установке разрешений. Я новичок в keycloak; Надеюсь, это не глупый вопрос.

WastedFreeTime 15.12.2020 16:43

Все еще очень полезно почти три года спустя, спасибо!

CodeShane 31.12.2021 10:42
Ответ принят как подходящий

Вот как я мог в конечном итоге сопоставить групповые атрибуты (унаследованные как пользовательские атрибуты, как предполагалось ранее) в информацию о пользователе, в раздел «другие утверждения»:

User Attribute Mapper

это сработало для вас? Атрибуты группы не могут быть сопоставлены с помощью картографа AFAIK...

Tomek Cejner 22.08.2020 02:09

Мне потребовалось время, чтобы понять этот ответ. Вы ссылаетесь на следующее: Пользователи, которые становятся членами группы, наследуют атрибуты, определенные этой группой.. Это означает, что вы действительно можете выполнить сопоставление атрибутов пользователей и получить атрибуты из их групп. Будьте осторожны, так как вы можете столкнуться с некоторыми конфликтами между именами групп, которые атрибуты пользователя

Crystark 15.12.2020 17:48

Другие вопросы по теме