Authentication 如何在keydepeat中使用手机号码对用户进行身份验证

Authentication 如何在keydepeat中使用手机号码对用户进行身份验证,authentication,keycloak,openid,phone-number,keycloak-rest-api,Authentication,Keycloak,Openid,Phone Number,Keycloak Rest Api,用户在KeyClope中具有自定义属性phoneNumber 使用用户名和密码获取令牌有一种默认方法,但是否可以使用phoneNumber/password而不是用户名/密码进行身份验证 curl \ -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \ -d "username=$UNAME" -d "password=$PASSWORD"

用户在KeyClope中具有自定义属性phoneNumber

使用用户名和密码获取令牌有一种默认方法,但是否可以使用phoneNumber/password而不是用户名/密码进行身份验证

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中的自定义属性进行身份验证?环顾四周后,我觉得您将无法使用现成的KeyClope提供的功能。在当前的KeyClope实施中,无法使用:

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"
因为keydape本身既不检查用户属性
phoneNumber
是否为有效数字,也不检查它是否为唯一数字。由于显而易见的原因,最后一个约束是最基本的,因此keydape强制用户名是唯一的

因此,您可以尝试使用该功能扩展
keydape
,这是最近在生产环境中完成的。幸运的是,开发人员很好地为其他人提供了要实现的功能,请检查此详细说明实现

但是,如果您只想使用您在问题中发布的“默认抓取方法”,那么您可以做的只是说用户名本身必须是移动电话(类似于WhatsApp方法),这并不像听起来那么糟糕,因为1)KeyClope强制要求用户名是唯一的,2)keydepeat仍然具有字段first name和last name,以通过用户名识别用户

现在棘手的部分是确保在用户注册期间,用户确实插入了一个有效的电话号码,而不是一些随机字符串。为此,您可以再次扩展KeyClope,并在那里验证它。然而,如果你要使用这个根目录,你也可以使用RedHat博客文章中的功能。或者使用您自己的应用程序管理用户注册,这将强制用户通过依赖某些
SMS
安全功能添加有效的电话号码,并且在执行验证后,应用程序本身将在keydove上注册用户,用户名字段设置为用户电话号码