authentication - 使用电话号码功能登录
问题描述
目前我正在使用电话号码进行功能登录,用户将输入他们的电话号码,服务器将发送包含 OTP 的短信。
我已经研究了很多天来寻找与 Keycloak 集成的解决方案,但仍然坚持下去。我看到我们需要使用身份验证器 SPI,扩展 keycloak 并实现我们想要的代码。
我也考虑过使用其他第三方来处理短信和 otp 的东西(比如 Firebase),然后将使用 firebase 令牌来交换 keycloak 令牌,但是在 Keycloak 中不支持 firebase 的提供者,因此无法执行此流程
我只想问有没有其他方法可以在不扩展 Keycloak 的情况下执行此功能?或者我们可以通过 API 获取 keycloak 令牌但没有密码
解决方案
我可以想象围绕 keycloak 的小解决方案,它们一起可以得到你想要的。将尝试解释:)
- 想象一下电话号码是keycloak中的用户登录。
- 想象一下密码是系统生成的,比如编码的电话号码+盐;基本上哈希算法知道密码是什么,用户不知道。
- 您使用第三方库,该库验证用户手机号码和用户输入的短信,并且可以正常工作。
- 您在 keycloak 中创建系统用户,在 application.properties 中保存密码编码,为他分配一些管理员角色,如创建用户、查询用户,以及管理用户所需的其他内容。
现在,工作流程是:
- 用户输入手机号码 123,收到短信
- 用户验证短信,你知道用户号 123,你生成密码 hash1(hash2(123+salt)) (见第 2 点)
- 使用系统用户登录 keycloak,获取系统用户的 accessToken
- 使用 accessToken 检查用户是否存在,如果不存在,使用密码 hash(..) 创建用户 123,分配默认角色、组
- 从系统用户注销
- 使用用户 123 和密码 hash(..) 登录,加载用户 accessToken,构建用户配置文件,放入 SecurityContextHolder.getContext()
如果你让所有的小部分都工作,应该一起工作。
或者如果我错了就忽略我!祝你好运 !
推荐阅读
- ios - AudioQueueNewOutput 与 AudioQueueRef?总是展开 nil
- php - 在 yii2 basic 中调用控制器时出错
- wordpress - 在 wordpress 帖子循环中跳过三个帖子
- ruby-on-rails - 如何在多个 vps 服务器上运行 rails 应用程序以保持其性能良好?
- java - 如何进行 setter 和 getter 测试并使结果主要输出?
- javascript - 如何在 JavaScript 中包含 PHP 文件并传递参数
- php - 如何为 webview android 创建 id 并使用 php 获取 id
- dart - Flutter:如何在英雄动画期间更改子元素的大小?
- javascript - 在 oidc 保护的点网核心控制器中授权属性
- php - 在 PHP 中获取一组行的程序具有相同的代码结构,但在另一个上没有结果