还记得早些年,网易出了一个"将军令",用于在游戏中授权,以增加整个软件服务的安全性,现在大多数已经不再使用这种硬件口令,主要因为这东西成本较高,也不利于携带,丢失就得线上补办,比较麻烦。随着Google推出谷歌身份验证器 (Google Authenticator),大大便利了"将军令"服务。
下面来说说用Java怎么提供这种服务,主要是服务端校验,客户端直接安装app就好,在应用商店直接搜索Google身份验证器就能下载。下面是Java代码例子:
public class OtpUtil {
private final static Integer SECRET_LENGTH = 32;
private static String generateSecret(int length) {
SecureRandom random = new SecureRandom();
byte[] salt = new byte[length / 2];
random.nextBytes(salt);
return Base32.encode(salt);
}
public static String generateSecret64() {
return generateSecret(64);
}
/**
*
* @return
*/
public static String generateSecret() {
return generateSecret(SECRET_LENGTH);
}
/**
* 取当前的otp Code
* @param secret
* @return
*/
public static String generateOtpCode(String secret) {
return new Totp(secret).now();
}
/**
* 校验
*
* @param secret
* @param otp
* @return
*/
public static boolean verify(String secret, String otp) {
return new Totp(secret).verify(otp);
}
/**
*
* @param domain
* @param user
* @param secret
* @return
*/
public static String generateQrCode(String domain, String user, String secret) {
return "otpauth://totp/" + domain + "(" + user + ")?secret=" + secret;
}