1、google authenticator和我们要干嘛?
不多说,总之就是一个开放给大家使用的第三方动态密码校验软件。原来 根据二维码或者自定义输入一串密钥,authenticator就会根据当前的时间戳和这个密钥算出一个动态密码,每30秒变化一次。这个计算是本地进行的,不需要依赖网络,算法也是公开的,所以你的后端也可以算一次 做校验。
2、代码:
以下用到的Token 和 qrcode2个类,下文章底部附件可以下载到。
校验动态密码。
<?php include "Token.php"; //key 是需要保存下来的密钥,每次需要基于这个进行认证 //token 是需要校验的6位动态密码 //ALLOW_MFA_TIME 是允许用户手机时间和服务器时间的前后时间差,因为这个动态密码是基于时间生成的。时间差的原来其实很简单, 帮你生成前后这个时间的所有token 跟你输入的有一个是一样的 就算OK。 tr = Token::verify_key(key, token, ALLOW_MFA_TIME , Token::get_timestamp() ); if(tr!==true) { echo "ok"; } else { echo "failed"; }
生成密钥和二维码
1、密钥不要自己随便去生成几个字符,不是所有字符都能用的Token中有写好的静态方法可以生成
2、二维码的生成方式很多,可以依赖第3方的或者自己生成,甚至引入一张外部图片参数中传入内容也成。 二维码的内容在以下代码注释中介绍吧: