Войти с помощью номера телефона - PullRequest
0 голосов
/ 16 октября 2019

В настоящее время я работаю над функцией входа с номером телефона, пользователь вводит свой номер телефона, а сервер отправляет смс, содержащие OTP.

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

Я также подумал об использовании сторонних разработчиков для обработки sms и otp (например, Firebase), а затем использую токен firebaseдля обмена токеном keycloak, но firebase не поддерживается провайдером в Keycloak, поэтому не может сделать этот поток

Я просто хочу спросить, есть ли другие способы сделать эту функцию без расширения Keycloak? или просто мы можем получить токен Keycloak через API, но без пароля

1 Ответ

0 голосов
/ 18 октября 2019

Я могу представить себе небольшие решения вокруг брелка, которые вместе могут получить то, что вы хотите. Постараюсь объяснить:)

  1. Представьте, что номер телефона - это логин пользователя в keycloak.
  2. Представьте, что пароль генерируется системой, как кодированный номер телефона + соль;в основном хэш-алгоритм знает, какой пароль, пользователь не знает.
  3. Вы используете стороннюю библиотеку, которая проверяет номер мобильного телефона пользователя и вводит текстовое сообщение, и это работает.
  4. Вы создаете систему-используйте в keycloak, сохраняйте пароль в application.properties, назначьте ему некоторые роли администратора, такие как создание пользователя, запрос пользователя, что-то еще, что вам нужно для управления пользователями.

И теперь рабочий процесс:

  • Пользователь вводит мобильный номер 123, отправка смс отправляет
  • Пользователь проверяет смс, вы знаете номер пользователя 123, вы генерируете пароль hash1 (hash2 (123 + salt)) (см. Пункт 2)
  • Используя system-user, вы входите в keycloak, получаете accessToken для system-user
  • , используя accessToken, проверяете, существует ли пользователь, если нет, создайте пользователя 123 с хэшем пароля (..), назначьте роли по умолчанию, группы
  • Выйти из системы-пользователя
  • войти в систему с пользователем 123 и хэшем пароля (..), загрузить user AccessToken, создать профиль пользователя, вставить в SecurityContextHolder.getContext ()

Если вы заставляете все маленькие биты работать, должны работать все вместе.

или просто игнорируйте меня, если я ошибаюсь! Удачи!

...