Я пытаюсь реализовать настраиваемый 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, который передается в параметре запроса. Это не похоже на правильный путь.
Любая помощь / мысли будут очень полезны.