Java 使用相同电话号码的OTP处理并行登录和最大无效尝试次数

Java 使用相同电话号码的OTP处理并行登录和最大无效尝试次数,java,spring,authentication,passwords,one-time-password,Java,Spring,Authentication,Passwords,One Time Password,我正在设计一个登录系统,使用OTP和注册用户的电子邮件ID执行登录操作 当前方法如下所示 用户输入注册的电子邮件Id 如果电子邮件ID有效,服务器将事务ID作为cookie发送到UI,并将OTP发送到附加到该电子邮件ID的电话号码 OTP存储在redis中2分钟,其中事务ID是键,OTP是值 当用户输入OTP时,服务器使用从cookie发送的事务ID检查输入的OTP是否相同 如果用户输入错误的OTP超过3次,我将暂停该用户。这是通过使用最初在向用户的移动电话发送OTP时生成的事务ID跟踪无效尝试

我正在设计一个登录系统,使用OTP和注册用户的电子邮件ID执行登录操作

当前方法如下所示

  • 用户输入注册的电子邮件Id
  • 如果电子邮件ID有效,服务器将事务ID作为cookie发送到UI,并将OTP发送到附加到该电子邮件ID的电话号码
  • OTP存储在redis中2分钟,其中事务ID是键,OTP是值
  • 当用户输入OTP时,服务器使用从cookie发送的事务ID检查输入的OTP是否相同
  • 如果用户输入错误的OTP超过3次,我将暂停该用户。这是通过使用最初在向用户的移动电话发送OTP时生成的事务ID跟踪无效尝试来实现的
  • 当前设计面临的障碍

  • 如果用户同时尝试在不同的浏览器中登录,我应该发送我第一次创建的相同OTP,还是应该发送不同的OTP,因为我使用事务ID将它们视为单独的,还是应该一次只允许一个登录过程。因为如果OTP在2分钟内有效,并且用户在这2分钟内尝试从不同的浏览器登录,我应该如何处理

  • 无效尝试当前基于生成OTP时发送的事务ID计数,因此如果用户刷新浏览器或使用匿名模式,则失败尝试将丢失,因为旧事务ID不再存在。如果我在用户级别保留故障计数,则从浏览器输入无效的otp也会影响其他浏览器上的故障计数

  • 我正在寻找一些指导方针来实现安全的OTP登录身份验证机制