Keycloak / OIDC: получить атрибуты групп пользователей - PullRequest
0 голосов
/ 29 мая 2019

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

Я использую клиент 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 отсутствуют атрибуты.

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

Ответы [ 2 ]

1 голос
/ 30 мая 2019

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

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

enter image description here

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

enter image description here

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

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

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

enter image description here

0 голосов
/ 03 июня 2019

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

User Attribute Mapper

...