49 lines
1.6 KiB
Java
49 lines
1.6 KiB
Java
package com.jmal.clouddisk.config;
|
||
|
||
import dev.samstevens.totp.code.*;
|
||
import dev.samstevens.totp.qr.QrGenerator;
|
||
import dev.samstevens.totp.qr.ZxingPngQrGenerator;
|
||
import dev.samstevens.totp.secret.DefaultSecretGenerator;
|
||
import dev.samstevens.totp.secret.SecretGenerator;
|
||
import dev.samstevens.totp.time.SystemTimeProvider;
|
||
import dev.samstevens.totp.time.TimeProvider;
|
||
import org.springframework.context.annotation.Bean;
|
||
import org.springframework.context.annotation.Configuration;
|
||
|
||
@Configuration
|
||
public class TotpConfig {
|
||
|
||
@Bean
|
||
public SecretGenerator secretGenerator() {
|
||
// 用于生成新的MFA密钥
|
||
return new DefaultSecretGenerator(64);
|
||
}
|
||
|
||
@Bean
|
||
public TimeProvider timeProvider() {
|
||
// 提供当前时间,用于TOTP计算
|
||
return new SystemTimeProvider();
|
||
}
|
||
|
||
@Bean
|
||
public CodeGenerator codeGenerator() {
|
||
// TOTP代码生成器,使用标准SHA1算法,6位数字,30秒周期
|
||
return new DefaultCodeGenerator(HashingAlgorithm.SHA1, 6);
|
||
}
|
||
|
||
@Bean
|
||
public CodeVerifier codeVerifier(TimeProvider timeProvider, CodeGenerator codeGenerator) {
|
||
// 代码验证器
|
||
DefaultCodeVerifier verifier = new DefaultCodeVerifier(codeGenerator, timeProvider);
|
||
// 关键:设置容错窗口,允许客户端和服务器之间有轻微的时间偏差
|
||
// 1 表示允许前后一个时间周期(即前后30秒)的代码也有效
|
||
verifier.setAllowedTimePeriodDiscrepancy(1);
|
||
return verifier;
|
||
}
|
||
|
||
@Bean
|
||
public QrGenerator qrGenerator() {
|
||
return new ZxingPngQrGenerator();
|
||
}
|
||
}
|