使用电话号码功能登录

时间:2019-10-16 17:11:25

标签: authentication keycloak openid-connect vert.x one-time-password

当前我正在使用电话号码登录功能,用户将输入其电话号码,服务器将发送包含OTP的短信。

我已经研究了很多天,以便与Keycloak集成该解决方案,但仍然坚持使用它。我看到我们需要使用身份验证器SPI,扩展密钥斗篷并实现所需的代码。

我还考虑过使用其他第三方来处理短信和otp内容(例如Firebase),然后将使用Firebase令牌交换keycloak令牌,但是Keycloak中不支持firebase的提供程序,因此无法执行此流程

我只想问问是否还有其他方法可以在不扩展Keycloak的情况下实现此功能?或者我们可以简单地通过API却没有密码来获取keycloak令牌

1 个答案:

答案 0 :(得分:0)

我可以想象围绕keycloak的小型解决方案,这些解决方案一起可以得到您想要的东西。将尝试解释:)

  1. 想象电话号码是用户在密钥斗篷中的登录名。
  2. 想象一下密码是系统生成的,例如编码的电话号码+盐;基本上哈希算法知道密码是什么,而用户则不知道。
  3. 您使用第三方库,该库可验证用户输入的手机号码和短信,并且可以使用。
  4. 您可以在密钥斗篷中创建系统用户,并在application.properties中保留密码编码,为他分配一些管理员角色,例如“创建用户”,“查询用户”以及其他一些需要管理用户的角色。

现在,工作流程是:

  • 用户输入手机号码123,短信会发送
  • 用户验证短信, 您知道用户号码123,就生成了密码 hash1(hash2(123 + salt))(请参阅第2点)
  • 使用您登录密钥库的系统用户,获取系统用户的访问令牌
  • 使用accessToken检查用户是否存在,如果不存在,则使用密码hash(..)创建用户123,分配默认角色,组
  • 从系统用户注销
  • 使用用户123和密码hash(..)登录,加载用户accessToken,构建用户配置文件,并放入SecurityContextHolder.getContext()

如果所有小片段都可以工作,则应该一起工作。

或者如果我错了就别理我!祝你好运!