Проверка подлинности Keycloak - скрипт после перенаправления Identity Provider - PullRequest
0 голосов
/ 24 октября 2018

Для моего проекта в Keycloak присутствуют пользователи с правильно установленным идентификатором Identity Provider Link.Некоторые из этих пользователей не имеют роли, установленной для клиента моего проекта.Эти пользователи вошли (потому что у них есть действующая учетная запись Google) в мое приложение, а затем приложение должно управлять тем фактом, что они не должны получать доступ к приложению (потому что у них нет роли).Я хотел бы сказать, что keycloak не следует перенаправлять в мое приложение, если у пользователя нет роли.Я уже сделал это для формы пароля пользователя (используя сценарий, см. Ниже код сценария), но мне не удается это сделать с помощью перенаправителя Identity Provider, сценарий после которого, кажется, не выполняется (перенаправление происходит в перенаправитель Identity Provider).

Заранее благодарен за любую помощь,

Редактировать: скрипт, который работает для имени пользователя Форма пароля:

/*
 * Template for JavaScript based authenticators.
 * See org.keycloak.authentication.authenticators.browser.ScriptBasedAuthenticatorFactory
 */

// import enum for error lookup
AuthenticationFlowError = Java.type("org.keycloak.authentication.AuthenticationFlowError");
UserCredentialModel = Java.type("org.keycloak.models.UserCredentialModel");
Errors = Java.type("org.keycloak.events.Errors");
OAuth2ErrorRepresentation = Java.type("org.keycloak.representations.idm.OAuth2ErrorRepresentation");
MediaType = Java.type("javax.ws.rs.core.MediaType");
Response = Java.type("javax.ws.rs.core.Response");

FormMessage = Java.type('org.keycloak.models.utils.FormMessage');
/**
 * An example authenticate function.
 *
 * The following variables are available for convenience:
 * user - current user {@see org.keycloak.models.UserModel}
 * realm - current realm {@see org.keycloak.models.RealmModel}
 * session - current KeycloakSession {@see org.keycloak.models.KeycloakSession}
 * httpRequest - current HttpRequest {@see org.jboss.resteasy.spi.HttpRequest}
 * script - current script {@see org.keycloak.models.ScriptModel}
 * authenticationSession - current authentication session {@see org.keycloak.sessions.AuthenticationSessionModel}
 * LOG - current logger {@see org.jboss.logging.Logger}
 *
 * You one can extract current http request headers via:
 * httpRequest.getHttpHeaders().getHeaderString("Forwarded")
 *
 * @param context {@see org.keycloak.authentication.AuthenticationFlowContext}
 */
function authenticate(context) {

    var username = user ? user.username : "anonymous";
    LOG.info(script.name + " trace auth for: " + username + " " + session.getContext().getClient().getClientId());

    var client = session.getContext().getClient();
    var rolesClient = user.getClientRoleMappings(client);

    if (rolesClient.isEmpty()) {
        context.forkWithErrorMessage(new FormMessage('label', 'Utilisateur non autorisé'));
        return;
    }
    context.success();
}

1 Ответ

0 голосов
/ 26 февраля 2019

У меня была такая же проблема в моем проекте.Мне удалось решить это с помощью «Post Login Flow» на провайдере идентификации.

Шаги, которые я должен был сделать, были:

  1. Создать новый поток с одним скриптом выполнения (здесь вы можете вставить свой скрипт).
  2. Перейти к идентификаторупоставщик.Под полем «Post Login Flow» выберите поток из 1.

Я надеюсь, что это также решит вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...