Skip to content

Keycloak

Официальный плагин CaptchaLa для Keycloak. Добавляет проверку CAPTCHA к встроенным экранам входа, регистрации и сброса пароля Keycloak, с проверкой на стороне сервера, без написания кода. Поставляется в виде единого JAR с провайдером, который вы помещаете в Keycloak.

Что охватывает

Каждый из приведённых ниже потоков подключается как отдельный шаг аутентификации — вы защищаете только те экраны, которые хотите.

  • Вход в браузере (форма имени пользователя / пароля)
  • Самостоятельная регистрация
  • Сброс пароля (экран «забыл пароль»)

По умолчанию проверка отображается как плавающий виджет (float) или как модальное окно по клику (popup).

Установка

1. Получите JAR

Плагин с открытым исходным кодом доступен по адресу github.com/Captcha-La/captchala-keycloak. Два варианта:

  • Скачать релиз (рекомендуется) — возьмите keycloak-captchala-<version>.jar со страницы Releases в репозитории.
  • Собрать из исходниковgit clone репозитория и выполните mvn clean package; JAR будет создан в директории target/.

Плагин рассчитан на Keycloak ≥ 26 (Quarkus) и Java 17.

2. Разверните его

bash
cp keycloak-captchala-1.0.0.jar /opt/keycloak/providers/
/opt/keycloak/bin/kc.sh build
# перезапустите Keycloak

Затем установите тему входа: Realm settings → Themes → Login theme → captchala.

3. Получите ключи

Зарегистрируйтесь на dash.captcha.la, создайте приложение и скопируйте:

  • App Key — публичный, встраивается в страницу
  • App Secret — только для сервера, используется Keycloak для выпуска одноразового токена и вызова /v1/validate

4. Подключите потоки

В консоли администратора добавьте соответствующий исполнитель в каждый поток, который хотите защитить, затем нажмите на значок шестерёнки, чтобы вставить App Key и App Secret:

  • Вход в браузере — продублируйте поток browser, замените Username Password Form на Captchala Username Password Form (REQUIRED), привяжите его как поток browser для области.
  • Регистрация — продублируйте поток registration, добавьте Captchala Registration (REQUIRED) в подпоток registration-form, привяжите его как поток регистрации для области.
  • Сброс пароля — продублируйте поток reset credentials, замените Choose User на Captchala Reset Credential (choose user) (REQUIRED), привяжите его как поток reset-credentials для области.

Откройте один из защищённых экранов в приватном окне, чтобы убедиться, что проверка отображается.

Конфигурация

Каждый исполнитель настраивается независимо через значок шестерёнки. Настройки по умолчанию работают сразу после установки ключей.

НастройкаКлючПо умолчаниюОписание
App Keyapp.keyПубличный ключ из панели управления CaptchaLa. Обязательно.
App Secretapp.secretСерверный секрет. Обязательно. Хранится в маскированном виде, никогда не передаётся в браузер.
Базовый URL APIapi.basehttps://apiv1.captcha.laБазовый URL API CaptchaLa.
URL скрипта виджетаscript.urlhttps://api.captcha.la/sdk/jslib/captchala.jsАдрес загрузки JavaScript виджета.
URL стилей виджетаcss.urlhttps://api.captcha.la/sdk/jslib/captchala.cssАдрес загрузки CSS виджета.
Режим отображенияproductfloatfloat (плавающий виджет) или popup (модальное окно).
Метка действияactionпо потокуСтрока action, отправляемая при проверке (login, register, reset).
Языкlanguageлокаль областиЯзык виджета; пустое значение следует локали Keycloak.
Блокировать при сбоеfail.closedtrueЕсли API CaptchaLa недоступен, отправка блокируется. Отключите, чтобы разрешать отправку при сбое.
Использовать серверный токенuse.server.tokentrueВыпускать одноразовый серверный токен при рендеринге для усиленной защиты от повторного использования.

FAQ

Плагин бесплатный?

Да. Плагин для Keycloak бесплатный и с открытым исходным кодом. Бесплатный план CaptchaLa покрывает 10 000 проверок в месяц — платные планы нужны, только если требуется больший объём.

Какие версии Keycloak поддерживаются?

Keycloak 26+ на дистрибутиве Quarkus, собранный против версии 26.5.6 с Java 17. Поместите JAR в providers/, выполните kc.sh build и перезапустите.

Какие экраны можно защитить?

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

App Secret когда-либо передаётся в браузер?

Нет. Секрет хранится в маскированном виде и передаётся только в заголовке X-App-Secret от Keycloak к API CaptchaLa. Он никогда не появляется ни на одной странице, в шаблоне или логе. Каждая проверка верифицируется с помощью одноразового токена, поэтому решённый токен нельзя использовать повторно.

Что происходит, если API CaptchaLa недоступен?

По умолчанию плагин блокирует отправку (fail closed). Установите fail.closed в off на любом исполнителе, чтобы разрешать отправку при сбое — полезно для поэтапного выкатывания, но не рекомендуется для продакшена.

Исходный код

MIT-licensed examples · CaptchaLa is operated independently