首页 > 解决方案 > 使用电话号码功能登录

问题描述

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

我已经研究了很多天来寻找与 Keycloak 集成的解决方案,但仍然坚持下去。我看到我们需要使用身份验证器 SPI,扩展 keycloak 并实现我们想要的代码。

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

我只想问有没有其他方法可以在不扩展 Keycloak 的情况下执行此功能?或者我们可以通过 API 获取 keycloak 令牌但没有密码

标签: authenticationkeycloakopenid-connectvert.xone-time-password

解决方案


我可以想象围绕 keycloak 的小解决方案,它们一起可以得到你想要的。将尝试解释:)

  1. 想象一下电话号码是keycloak中的用户登录。
  2. 想象一下密码是系统生成的,比如编码的电话号码+盐;基本上哈希算法知道密码是什么,用户不知道。
  3. 您使用第三方库,该库验证用户手机号码和用户输入的短信,并且可以正常工作。
  4. 您在 keycloak 中创建系统用户,在 application.properties 中保存密码编码,为他分配一些管理员角色,如创建用户、查询用户,以及管理用户所需的其他内容。

现在,工作流程是:

  • 用户输入手机号码 123,收到短信
  • 用户验证短信,你知道用户号 123,你生成密码 hash1(hash2(123+salt)) (见第 2 点)
  • 使用系统用户登录 keycloak,获取系统用户的 accessToken
  • 使用 accessToken 检查用户是否存在,如果不存在,使用密码 hash(..) 创建用户 123,分配默认角色、组
  • 从系统用户注销
  • 使用用户 123 和密码 hash(..) 登录,加载用户 accessToken,构建用户配置文件,放入 SecurityContextHolder.getContext()

如果你让所有的小部分都工作,应该一起工作。

或者如果我错了就忽略我!祝你好运 !


推荐阅读