java动态口令登录实现过程详解

Java动态口令登录实现过程详解

什么是动态口令

  • 动态口令是指使用时间限制的口令。
  • 不同于常规的静态口令,动态口令需要设备生成一次性密码,具有更高的安全性。

动态口令登录的实现过程

  1. 用户在登录页面输入用户名和密码,提交表单给后端服务器。
  2. 后端服务器接收到表单后,根据用户名查询数据库中存储的该用户的密钥。
  3. 后端服务器随机生成一个6位数的随机数,并使用密钥生成一个一次性密码。
  4. 后端服务器将生成的一次性密码和随机数存储到数据库中,并将随机数返回给前端页面。
  5. 前端页面通过JS将用户输入的密码和后端返回的随机数作为参数,对密码进行加密处理。
  6. 加密后的密码和用户名一起提交表单至后端服务器。
  7. 后端服务器接收到表单后,重新生成一次性密码,并使用相同的算法判断加密后的密码是否正确。
  8. 如果密码正确,则将登录成功的信息存储到session中,并跳转至用户主页面。
  9. 如果密码错误,则返回登录错误的信息。

代码实现

后端实现代码

//查询该用户的密钥
String secretKey = userService.getUserSecretKey(username);

//生成6位数随机数
String randomNum = RandomUtil.getRandomNumber(6);

//使用密钥生成一次性密码
String otp = OtpUtil.generateOtp(secretKey, randomNum);

//将一次性密码和随机数存储到数据库
userService.saveOtp(username, otp, randomNum);

前端实现代码

//使用jsotp库生成动态口令
var totp = jsotp.TOTP("<?php echo $otp ?>");
var pin = totp.now();

//将生成的动态口令和随机数加密后提交表单
var ciphertext = CryptoJS.SHA256(pin + randomNum + password + username).toString();

示例说明

示例1:用户使用手机号和密码登录

  1. 用户在登录页面输入手机号和密码并提交表单。
  2. 后端服务器查询数据库中该用户的密钥,并生成一次性密码和随机数存储到数据库。
  3. 后端服务器将随机数返回给前端页面。
  4. 前端使用随机数和密码生成加密后的密码,和手机号一起提交表单至后端。
  5. 后端验证密码是否正确,如果正确则将登录成功的信息存储到session中。

示例2:用户使用谷歌验证码和密码登录

  1. 用户打开谷歌验证码APP,获取当前动态口令。
  2. 用户在登录页面输入用户名、密码和当前动态口令并提交表单。
  3. 后端服务器查询数据库中该用户的密钥,并生成一次性密码和随机数存储到数据库。
  4. 后端服务器将随机数返回给前端页面。
  5. 前端使用随机数和密码生成加密后的密码,和用户名一起提交表单至后端。
  6. 后端验证密码是否正确,如果正确则将登录成功的信息存储到session中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java动态口令登录实现过程详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • springboot处理异常的5种方式

    下面我会为您详细讲解Spring Boot处理异常的五种方式,过程中会包含两条示例。 1. 使用@ControllerAdvice @ControllerAdvice可以用来捕获Controller抛出的异常,然后做出相应的处理。需要在类上加上注解@ControllerAdvice来表示这是一个异常处理类,然后再配合上@ExceptionHandler注解来…

    Java 2023年5月27日
    00
  • SpringMVC中controller接收json数据的方法

    下面我将详细讲解”SpringMVC中controller接收json数据的方法”的攻略。 一、引入Jackson库 在项目的pom.xml文件中增加Jackson依赖: <!–Jackson依赖–> <dependency> <groupId>com.fasterxml.jackson.core</groupI…

    Java 2023年5月26日
    00
  • SpringBoot整合Security安全框架实现控制权限

    接下来我将详细讲解Spring Boot如何整合Spring Security实现权限控制。 一、Spring Security简介 Spring Security是一个基于Spring的安全框架,提供了全面的安全服务,包括认证和授权等。通过Spring Security,用户可以轻松地实现基于角色的访问控制(RBAC)、LDAP 认证、OpenID、CAS…

    Java 2023年5月20日
    00
  • jsp利用application统计在线人数的方法

    当使用JSP构建Web应用程序时,使用application对象统计在线用户可以是一项非常有用的功能。application对象是一个全局Java对象,生命周期与Web应用程序相同。因此,它可以在整个Web应用程序范围内使用,使其成为监控在线用户统计的良好的机制。 以下是使用JSP利用application对象统计在线人数的攻略: 1.记录用户会话 为了跟踪…

    Java 2023年6月15日
    00
  • 将properties文件的配置设置为整个Web应用的全局变量实现方法

    将properties文件的配置设置为整个Web应用的全局变量实现方法可以采用ServletContextListener监听器实现。 实现步骤如下: 创建一个Properties文件,例如config.properties,用于存储Web应用的配置信息。该文件的格式类似于以下示例: database.driver=com.mysql.jdbc.Driver…

    Java 2023年6月15日
    00
  • Java使用kafka发送和生产消息的示例

    下面是使用Java发送和生产消息的示例攻略。 准备工作 安装Kafka 创建一个主题(Topic) 引入Kafka和zookeeper依赖 在pom.xml中添加以下依赖: <dependencies> <dependency> <groupId>org.apache.kafka</groupId> <a…

    Java 2023年5月20日
    00
  • 解决spring security中遇到的问题

    下面我将为你详细讲解解决Spring Security中遇到的问题的完整攻略。 解决Spring Security中遇到的问题的完整攻略 问题描述 当我们在使用Spring Security时,常常会遇到一些问题,比如无法登录、权限校验不起作用等等。 解决攻略 针对这些问题,我们可以采取如下解决攻略: 检查配置:首先检查Spring Security的配置,…

    Java 2023年5月20日
    00
  • Java Apache Commons报错“UnsupportedOperationException”的原因与解决方法

    “UnsupportedOperationException”是Java的ApacheCommons类库中的一个异常,通常由以下原因之一引起: 尝试修改不支持的操作:如果尝试修改不支持的操作,则可能会出现此异常。例如,可能会尝试修改Java中的不可修改列表。 尝试使用不支持的方法:如果尝试使用不支持的方法,则可能会出现此异常。例如,可能会尝试在Java中使用…

    Java 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部