1. 初始化ukey

  2. 绑定ukey和用户(前端打开web助手绑定)

    1. 通过硬件设备标识、公钥、证书 绑定用户
      1. 加字段还是建表?
  3. 安全管理员负责开启双因子认证

    1. !!!前提 必须先将可以管理用户的几个用户绑定ukey不然谁都没办法登录了
  4. 账密用户登录

  5. 这个做一个配置 是否开启了双因子认知(这里要怎么去做配置,通过nacos还是持久化)

    1. 如果开启了的话需要输入pin0码
  6. 校验

    1. 前端调用web助手 拿数据 (考虑使用硬件设备标识 + token)做签名

    2. 然后调用后端接口传参 硬件设备标识 + token

     1. (后端) 通过后端通过token拿到用户id,然后判断用户id与设备硬件标识是否一致,不一致抛出异常
    
     2. 一致的话去验签
    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // 验签伪代码
    public boolean verifySignature(String message , String signature, String userId) {
    try {
    // 1. 获取用户公钥
    UserUKey userUKey = userUKeyRepository.findByUserId(userId);
    if (userUKey == null) {
    throw new BusinessException("用户未绑定UKey");
    }

    // 2. SM3计算消息摘要
    String messageDigest = SmUtil.sm3(message);

    // 3. SM2验证签名
    SM2 sm2 = SmUtil.sm2(null, userUKey.getPublicKey());
    return sm2.verify(messageDigest.getBytes(), signature.getBytes());

    } catch (Exception e) {
    log.error("验签失败", e);
    return false;
    }
    }

时序图

UKey双因子认证流程