ukey登录整体梳理逻辑
-
初始化ukey
-
绑定ukey和用户(前端打开web助手绑定)
- 通过硬件设备标识、公钥、证书 绑定用户
- 加字段还是建表?
- 通过硬件设备标识、公钥、证书 绑定用户
-
安全管理员负责开启双因子认证
- !!!前提 必须先将可以管理用户的几个用户绑定ukey不然谁都没办法登录了
-
账密用户登录
-
这个做一个配置 是否开启了双因子认知(这里要怎么去做配置,通过nacos还是持久化)
- 如果开启了的话需要输入pin0码
-
校验
-
前端调用web助手 拿数据 (考虑使用硬件设备标识 + token)做签名
-
然后调用后端接口传参 硬件设备标识 + 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双因子认证流程
评论