使用谷歌身份验证器(Google Authenticator)保护你的后台

为何要使用谷歌身份验证器

普通的网站只使用账号、密码、图形验证码进行后台登录。根据我(作为站长)多年的经验来看,这种方式安全性很低,尤其是使用 http 协议,明文的帐号和密码相当于在网络上裸奔。如果使用 https 方式,被撞库攻击的概率也比较大:比如在多个数字货币交易所,使用了相同的密码。

稍微安全点的方式,是每次登录时都使用 短信验证码 或 邮箱验证码 进行验证,这样后台的安全性提高了一个等级,但短信的花费较高,免费邮箱的实时性和可达性都不可靠。

因此,谷歌身份验证器可以作为一个更好的选择。谷歌身份验证器实现原理类似于 QQ 令牌,不依赖于网络,30秒更新一次。现在几乎所有的数字货币交易所,都支持谷歌身份验证器,由此可见他的重要性以及安全性。

谷歌身份验证器 实现原理

这里不做学术上的研究。

执行流程

  1. 用户注册时,给用户生成一个密钥。前台给用户显示该密钥。后台将该密钥与用户绑定。
  2. 用户下载 谷歌身份验证器 app,将 密钥 添加到 app 里,即可查看实时密码。
  3. 用户登录网站时,打开 app 查看密码,并输入登陆。
  4. 后台接收到用户输入的密码,同时取出用户的密钥,进行谷歌身份验证。
  5. 如果验证成功,则登录成功。

在自己的网站上加入 谷歌身份验证器(以 java 为例)

  1. pom.xml导入依赖,或自己下载 jar 进行导入。

地址:https://github.com/wstrange/GoogleAuth


    com.warrenstrange
    googleauth
    1.1.2

  1. 写后台验证代码
public static void main(String[] args) {
    // 用户注册时使用
    // 获取一个新的密钥,默认16位,该密钥与用户绑定
    GoogleAuthenticator gAuth = new GoogleAuthenticator();
    final GoogleAuthenticatorKey key = gAuth.createCredentials();
    String key1 = key.getKey();

    // 用户登录时使用
    // 根据用户密钥和用户输入的密码,验证是否一致。(近3个密码都有效:前一个,当前,下一个)
    boolean isCodeValid = gAuth.authorize("YVLC6ILRRIOU4CIU", 496969);
    System.out.println(isCodeValid);

    // 根据密钥,获取最新密码(后台用不到,用来开发 谷歌身份验证器 客户端)
    int code = gAuth.getTotpPassword("YVLC6ILRRIOU4CIU");
    System.out.println(code);
}

windows 客户端(可以在windows电脑上使用的客户端)

github地址:

https://github.com/katanala/GoogleAuthPcClient

参考地址:https://www.fengyunxiao.cn

你可能感兴趣的:(java)