使用jap-mfa
提示
jap-mfa 是为了方便快速的实现多因素认证中的 TOTP(Time based one-time password) 认证。
# 1. 引入依赖
<dependency>
<groupId>com.fujieid</groupId>
<artifactId>jap-mfa</artifactId>
<version>{latest}</version>
</dependency>
1
2
3
4
5
6
2
3
4
5
6
# 2. 实现 JapMfaService
接口
public static class JapMfaServiceImpl implements JapMfaService {
/**
* 根据帐号查询 secretKey
*
* @param userName 申请 secretKey 的用户
* @return secretKey
*/
@Override
public String getSecretKey(String userName) {
// do something
return secretKey;
}
/**
* 将 secretKey 关联 userName 后进行保存,可以存入数据库也可以存入其他缓存媒介中
*
* @param userName 用户名
* @param secretKey 申请到的 secretKey
* @param validationCode 当前计算出的 TOTP 验证码
* @param scratchCodes scratch 码
*/
@Override
public void saveUserCredentials(String userName, String secretKey, int validationCode, List<Integer> scratchCodes) {
// do something
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 3. 初始化 JapMfa
JapMfa japMfa = new JapMfa(new JapMfaServiceImpl());
1
# 4. 生成 TOTP 绑定二维码
jap-mfa
提供了四种创建二维码的方式:
- 生成
File
-File otpQrCodeFile = japMfa.getOtpQrcodeFile(username, issuer);
- 生成图片的
base64
字符串(可直接通过img
标签的src
属性显示) -String otpQrCodeBase64 = japMfa.getOtpQrcodeFileBase64(username, issuer, true);
- 生成可直接访问的图片 URL -
String otpQrCodeUrl = japMfa.getOtpQrCodeUrl(username, issuer);
- 直接通过
HttpServletResponse
返回图片 -japMfa.createOtpQrcode(username, issuer, HttpServletResponse);
其中,username
为当前需要绑定的用户名,issuer
一般为服务提供者,比如 Baidu
、baidu.com
、JAP
等等
# 5. 扫码绑定 TOTP
手机下载安装 MFA 工具,比如:Google authenticator、TOTP Authenticator等等,打开安装好的 APP,选择扫描二维码(或者 Scan QR Code)。然后扫描第 4 步生成的二维码文件即可完成绑定。
# 6. 校验 TOTP 动态码
jap-mfa
提供了两种校验 TOTP 动态码的方式:
- 通过用户名校验 -
boolean verifyByUsernameResult = japMfa.verifyByUsername(username, consoleInput)
- 通过 secretKey 校验 -
boolean verifyBySecretResult = japMfa.verifyBySecret(secretKey, consoleInput);
校验通过返回 true
。
# 官方推荐
- 普通示例项目:jap-demo (opens new window)
- 前后端分离项目示例:jap-demo-vue (opens new window)
编辑 (opens new window)
Last Updated: 2021/10/07, 18:03:43