Keycloak: создание роли с атрибутами в Java Client

Я пытаюсь создать роль клиента в Keycloak (11.0.0) с keycloak-admin-client (11.0.0) с несколькими настраиваемыми атрибутами. Роль создается, но поле атрибута просто игнорируется Keycloak. Кто-нибудь знает, как заставить его работать?

Это упрощенный код, который я использую:

public void createRole(String name) {
    RoleRepresentation roleRepresentation = new RoleRepresentation();
    Map<String, List<String>> attributes = new HashMap<>();
    attributes.put("att1", Collections.singletonList("attribute1"));
    attributes.put("att2", Collections.singletonList("attribute2"));
    roleRepresentation.setAttributes(attributes);
    roleRepresentation.setClientRole(true);
    roleRepresentation.setName(name);
    realm.clients().get(client.getId()).roles().create(roleRepresentation);
}

Буду очень признателен за любую помощь в этом вопросе. Спасибо!


person Tobias    schedule 19.08.2020    source источник


Ответы (1)


Для всех, кто борется с той же проблемой: я сам нашел обходной путь. Вам нужно обновить вновь созданную роль тем же объектом, и она работает.

public void createRole(String name) {
        RoleRepresentation roleRepresentation = new RoleRepresentation();
        Map<String, List<String>> attributes = new HashMap<>();
        attributes.put("att1", Collections.singletonList("attribute1"));
        attributes.put("att2", Collections.singletonList("attribute2"));
        roleRepresentation.setAttributes(attributes);
        roleRepresentation.setClientRole(true);
        roleRepresentation.setName(name);
        realm.clients().get(client.getId()).roles().create(roleRepresentation);
        
        // Now update the new role immediately
        RoleResource roleResource = realm.clients().get(client.getId()).roles().get(name);
        roleResource.update(roleRepresentation);
    }
person Tobias    schedule 20.08.2020