Keycloak-6.0.1 Пользовательский аутентификатор SPI

Я пытаюсь реализовать настраиваемый SPI аутентификатора keycloack для целей аутентификации во внешней службе Datasource / Rest. План состоит в том, чтобы перенести их в Keycloak.

Обновлен поток браузера (скопируйте, создайте новый поток и привяжите его).

В первый раз, когда пользователь входит в систему, будет отображаться экран входа в пользовательскую тему.

При отправке с использованием пользовательского SPI аутентифицируйте внешнюю службу.

В случае успеха создайте пользователей в источнике данных keycloak.

Создавайте настраиваемые сопоставители для добавления дополнительных пользовательских атрибутов в токены.

Я следую разделу 8.3 официального руководства https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi_walkthrough, что очень похоже на то, что мне нужно.

Кроме того, следуя примерам (https://github.com/keycloak/keycloak/tree/master/examples/providers/authenticator) Я думаю, что инструкции не соответствуют новой версии.

Например: в вашей копии щелкните пункт меню «Действия» и «Добавить выполнение». Выберите секретный вопрос.

В Keycloak-6.0.1 нет такого исполнения, как «Выбрать секретный вопрос». Мне это действительно не нужно, но я, по крайней мере, пытался настроить этот поток, чтобы понять, как он работает.

Далее вам необходимо зарегистрировать необходимое действие, которое вы создали. Щелкните вкладку «Необходимые действия» в меню «Проверка подлинности». Нажмите кнопку «Зарегистрироваться» и выберите новое «Требуемое действие».

На нужном действии нет такой кнопки «Зарегистрироваться».

То, что я сделал. Создана новая область. Зарегистрированный клиент пользовательского интерфейса. Создан новый пользователь в новой области в таблицах keycloak. Пользовательский интерфейс при входе в систему перенаправляется на пользовательский интерфейс Keycloak и успешно аутентифицируется и может успешно извлекать токены с помощью адаптеров javascript

componentDidMount = () => {
        const keycloak = Keycloak('/keycloak.json');
        keycloak.init({onLoad: 'login-required'}).then(authenticated => {
            this.setState({ keycloak: keycloak, authenticated: authenticated })
        })
    }

....
....

if(this.state.keycloak) {
            if(this.state.authenticated) return (
                <div className="contact-body">
                 <p>Name: {this.state.name}</p>
                 <p>Email: {this.state.email}</p>
                 <p>ID: {this.state.id}</p>
               </div>
              );
      }
}

Хотелось бы использовать функции пользовательского интерфейса входа в Keycloak (например, OTP) вместе с пользовательским SPI аутентификатора. В настраиваемом аутентификаторе SPI получают поля формы, такие как имя пользователя и пароль, и аутентифицируют его с помощью внешней службы. Затем создайте пользователей в БД Keycloak.

Может ли администратор заблокировать / временно заблокировать пользователя в области в keycloak?

Другой вариант, который я планирую использовать, это обновить login.ftl onsubmit, чтобы отправить имя пользователя / пароль в настраиваемую службу с URL-адресом keycloak, переданным в качестве параметра запроса.
Будет проверять его на соответствие настраиваемой службе, создавать пользователей в базе данных keycloak и перенаправлять на URL-адрес keycloak, который передается в параметре запроса. Это не похоже на правильный путь.

Любая помощь / мысли будут очень полезны.


person AMJ Anthony    schedule 13.08.2019    source источник
comment
Эй, Энтони, ты решил это? не могли бы вы поделиться своим кодом? У меня точно такая же проблема!   -  person André de Mattos Ferraz    schedule 14.09.2020


Ответы (2)


Вы должны использовать «User Storage SPI». Это будет Раздел 11 в Keycloak Doc

Раздел 8 необходим, если вам нужна дополнительная / настраиваемая аутентификация, например, секретные вопросы.

person amj    schedule 16.08.2019

Это неправильный SPI, который вы внедряете. Для интеграции внешнего источника данных или службы необходимо реализовать настраиваемый пользовательский SPI хранилища.

person Boomer    schedule 15.08.2019