Доступ к ролям ключей / атрибутам пользователей из Java API - PullRequest
1 голос
/ 16 апреля 2019

Я создал роль и пользователя в Keycloak и добавил один атрибут в них обоих;например:

my_role_attr = 'x'
my_user_attr = 'y'

Затем я пытаюсь получить доступ к этой информации.через JAVA KeycloakSecurityContext (и связанный AccessToken / IDToken).Я могу видеть названия ролей и информацию о пользователе, но не могу найти эти атрибуты.

Я понимаю, что мне нужно создать «Атрибут пользователя» средства сопоставления протоколов, чтобы сопоставить «my_user_attr» с заявкой на токен.,Тогда хорошо, я могу получить значение в AccessToken / IDToken.

Но я не могу найти способ получить атрибут роли.Я не вижу никакого "Составителя протокола" для атрибута роли.Я что-то упустил?

1 Ответ

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

Я пытался сделать то же самое;и это не легко, однако вы можете использовать скрипт маппера с некоторым успехом.Исходный код https://github.com/keycloak/keycloak/blob/master/server-spi/src/main/java/org/keycloak/models/RoleModel.java содержит некоторую полезную информацию.Этот пункт SO (спасибо Андре B) также содержит полезную информацию Как создать Script Mapper в Keycloak? .

Мое (не совершенное или полное) решение:

/**
 * Available variables: 
 * user - the current user
 * realm - the current realm
 * token - the current token
 * userSession - the current userSession
 * keycloakSession - the current userSession
 */


var roles = [];
var client = keycloakSession.getContext().getClient();
user.getClientRoleMappings(client).forEach(function(roleModel) {
    var attr = [];
    var names = {};
    var rn = roleModel.getName();
    var map = roleModel.getAttributes();
    map.forEach(function(key, value){
        var k = {};
        var a = false;
        value.forEach(function(l){
            a = (l === 'true');
        });
        k[key] = a;
        attr.push(k);
    });
    names[rn] = attr;
    roles.push(names);
});


exports = roles;

Обратите внимание, что вам, вероятно, нужно установить «Multivalued» на «ON», а «Claim JSON Type» на «Select One ..».

...