Как я могу ограничить клиентский доступ только одной группе пользователей в Keycloak? - PullRequest
0 голосов
/ 22 января 2019

У меня есть клиент в keycloak для моей веб-страницы awx (ansible tower). Мне нужно только пользователи из одной конкретной keycloak группы, чтобы иметь возможность войти через этого клиента.

Как я могу запретить всем другим пользователям (кроме одной определенной группы) использовать этот keycloak клиент?

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Решено: 1. Создать новую роль в Keycloak. 2. Назначьте эту роль группе. 3. Создайте новый скрипт аутентификации в keycloak. Настройте, какая роль разрешена при входе в систему (например, user.hasRole (realm.getRole ("yourRoleName"))). 4. В настройках клиента в разделе «Переопределения потока аутентификации» выберите созданную аутентификацию (из шага 3).

0 голосов
/ 30 июля 2019

Если это может помочь, вот скрипт, который помогает реализовать это поведение для любого клиента: если клиент содержит заданную роль (здесь она называется feature:authenticate), тогда скрипт проверяет, есть ли у пользователя роль, и показываетстраница ошибки (новый шаблон, который необходимо развернуть в теме), если нет.

AuthenticationFlowError = Java.type("org.keycloak.authentication.AuthenticationFlowError");

 function authenticate(context) {
    var MANDATORY_ROLE = 'feature:authenticate';
    var username = user ? user.username : "anonymous";

    var client = session.getContext().getClient();

    LOG.debug("Checking access to authentication for client '" + client.getName() + "' through mandatory role '" + MANDATORY_ROLE + "' for user '" + username + "'");

    var mandatoryRole = client.getRole(MANDATORY_ROLE);

    if (mandatoryRole === null) {
        LOG.debug("No mandatory role '" + MANDATORY_ROLE + "' for client '" + client.getName() + "'");
        return context.success();
    }

    if (user.hasRole(mandatoryRole)) {
        LOG.info("Successful authentication for user '" + username + "' with mandatory role '" + MANDATORY_ROLE + "' for client '" + client.getName() + "'");
        return context.success();
    }

    LOG.info("Denied authentication for user '" + username + "' without mandatory role '" + MANDATORY_ROLE + "' for client '" + client.getName() + "'");
    return denyAccess(context, mandatoryRole);
 }

 function denyAccess(context, mandatoryRole) {
    var formBuilder = context.form();
    var client = session.getContext().getClient();
    var description = !mandatoryRole.getAttribute('deniedMessage').isEmpty() ? mandatoryRole.getAttribute('deniedMessage') : [''];
    var form = formBuilder
        .setAttribute('clientUrl', client.getRootUrl())
        .setAttribute('clientName', client.getName())
        .setAttribute('description', description[0])
        .createForm('denied-auth.ftl');
    return context.failure(AuthenticationFlowError.INVALID_USER, form);
 }
0 голосов
/ 26 января 2019

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

...