Как аутентифицировать пользователя по номеру мобильного телефона в Keycloak

У пользователя есть собственный атрибут phoneNumber в Keycloak.

Существует метод по умолчанию для получения токена с использованием имени пользователя и пароля, но можно ли пройти аутентификацию с использованием номера телефона/пароля вместо имени пользователя/пароля.

curl \
  -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
  -d "username=$UNAME" -d "password=$PASSWORD" \
  -d "grant_type=password" \
  "$KEYCLOAKHOST/auth/realms/$REALM/protocol/openid-connect/token"

Какой вызов следует использовать для аутентификации с использованием настраиваемого атрибута в UserModel


person M.R    schedule 11.11.2020    source источник


Ответы (1)


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

curl \
  -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
  -d "phoneNumber=$PhoneNumber" -d "password=$PASSWORD" \
  -d "grant_type=password" \
  "$KEYCLOAKHOST/auth/realms/$REALM/protocol/openid-connect/token"

поскольку сам Keycloak не проверяет, является ли атрибут пользователя phoneNumber действительным числом, и не проверяет, является ли он уникальным числом. Это последнее ограничение является фундаментальным по очевидным причинам, поэтому Keycloak обеспечивает уникальность имен пользователей.

Таким образом, вы можете попробовать расширить Keycloak той функциональностью, которая недавно была реализована в производственной среде. К счастью, разработчик был достаточно любезен, чтобы предоставить эту функциональность для реализации другими, проверьте это сообщение разработчика в блоге redhat с подробным описанием реализации.

Однако, если вы хотите использовать только метод по умолчанию, который вы указали в вопросе, то вы можете просто сказать, что само имя пользователя должно быть мобильный телефон (аналогично подходу WhatsApp), что не так плохо, как кажется, потому что 1) Keycloak обеспечивает уникальность имен пользователей, 2) Keycloak по-прежнему имеет поля имени и фамилии для идентификации пользователей по имени.

Теперь самое сложное — убедиться, что во время регистрации пользователя пользователь действительно вводит действительный номер телефона, а не какую-то случайную строку. Для этого вы можете либо снова расширить keycloak, либо проверить его там. Однако, если вы собираетесь использовать этот корень, вы также можете использовать функцию из сообщения в блоге RedHat. Или управляйте регистрацией пользователя с помощью своего собственного приложения, которое заставит пользователя добавить действительный номер телефона, полагаясь на некоторую функцию безопасности SMS, и после выполнения проверки приложение само зарегистрирует пользователя на Keycloak с установленным полем имени пользователя. на номер телефона пользователя.

person dreamcrash    schedule 19.11.2020