Цель: реализация подсистемы регистрации пользователя через СМС
Инструментарий:
Keycloak 24.0.4
Spring boot 3.2.5
Docker compose 2.27.0
Описание: Для open source решения Keycloak в качестве SSO (Single sign-on) необходима реализация модуля, который при регистрации и авторизации пользователя по СМС отправляет webhook на микросервис отправки одноразовых кодов (Spring)
Необходимо реализовать:
В части Keycloak:
- Если потребуется можно в связке использовать docker контейнер с postgres
Сконфигурировать Keycloak realm (возможно новый)
Реализовать форму авторизации по смс, где под каждый новый номер телефона создается аккаунт, без необходимости проходить регистрацию. При этом номер телефона записывается в бд в поле логин + в поле phone
Реализовать форму восстановления пароля по смс, где любой пользователь с заполненным полем phone может создать/восстановить постоянный пароль для авторизации по username or e-mail
Сконфигурировать Keycloak client, для возможности работы с данным функционалом через rest api
В части модуля для Keycloak: Для примера можно посмотреть реализаццию
Проверка корректности номера телефона
Отправка POST запроса с номером телефона и кодом на микросервис отправки смс
Реализовать api эндпоинт для авторизации (шаг: ввод номера) через rest client
Реализовать api эндпоинт для авторизации (шаг: ввод смс) через rest client
Реализовать сохранение нового пользователя в БД после корректной авторизации
Реализовать api эндпоинты для восстановления пароля через rest client
Реализовать блокировку по ip при __ количестве попыток в течении __ минут на 1 час
В части микросервиса отправки одноразовых кодов (Spring):
Использовать Gradle
Реализовать api эндпоинт для получения от Keycloak данных для отправки смс. На текущем этапе просто выводить эти данные в лог.
Реализовать api эндпоинт для получения от Keycloak данных для отправки смс на восстановление постоянного пароля. На текущем этапе просто выводить эти данные в лог.
В части Docker Compose (сконфигурировать все микросервисы):
Создать .env_example с примером кконфигурации для всей связки
Открыть только необходимые порты для Keycloak, остальные микросервисы общаются через докеровскую сеть
Все логины и пароли задаются только через переменные из .env
Конфигурация Keycloak, должна быть применена при создании контейнера. Json для импорта конфигурации не должен содержать чувствительных данных (токены, ключи, пароли) но допускается использовать переменные окружения, Keycloak умеет их тяннуть.
Конфигурация при перезапусках контейнера
Модули должны компилироваться в моменте билда контейнера, но в конечном слое остаются только jar модулей
Результат работы: github репозиторий с подробным peadme.md