导出Google身份校验器otp密钥迁移到web
背景:
公司的堡垒机需要使用30s有效期otp动态密码做二次登录。实现某些情况下,同事可通过web,在规定的有效期内可获取otp二次授权密码
otp:一次性密码(英语:OneTimePassword,简称OTP),通过密钥和时间hash得到固定长度的密码
Google身份校验器otpt密钥导出
Google身份校验器导出二维码,通过解析二维码可得到otpauth-migration://offline?data=XXXX
的一串数据。
解析otpauth-migration数据,我用到了extract_otp_secrets的python项目,解析后,拿到Secret
项目代码
已上传GitHub 项目代码,具体代码可参考
otp密码加解密
otp密码比较敏感,既然要上传GitHub,需做好加密
pom中引入jasypt-maven-plugin
插件,方便加解密
# 加密
mvn jasypt:encrypt-value -Djasypt.encryptor.password="password" -Djasypt.plugin.value="value"
解密
mvn jasypt:decrypt-value -Djasypt.encryptor.password="password" -Djasypt.plugin.value="ENC(47GYBJezlwnAkSUsVpoJhN2PmUSxhy2+RzakDWkjUZyZFCyZc676w3znplmuf/0F)"
加密把密文写入配置文件中,密钥通过启动JVM参数传入
接口列表
- port:/ :获取otp
有效期内返回
otp=987728 ,expires later :7second!!
非有效期
- port:/update/{minutes} :更新密码有效期
技术列表
1 使用otp-java生成otp密码
<dependency>
<groupId>com.github.bastiaanjansen</groupId>
<artifactId>otp-java</artifactId>
<version>1.3.2</version>
</dependency>
2 使用jasypt加密otp密码
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
Docker
使用docker部署
# 构建image
docker build -t myotp:v1.1.19 .
# 启动 传入密钥
docker run -d -p 8090:8090 -e JAVA_ARGS='-Djasypt.encryptor.password=passwd' --name otp myotp:v1.1.19