faimmedia/google-authenticator

用于验证Google Authenticator应用的代码

1.1.0 2016-09-18 15:44 UTC

This package is auto-updated.

Last update: 2024-09-29 04:47:01 UTC


README

简介

两步验证非常棒。太多人使用相同的密码进行多个操作,有时候有一个安全的应用程序会更好。

使用Google Authenticator可以让人们拥有另一层安全保护,只有在他们拥有密码并且在手机上正确设置Google Authenticator应用的情况下,才能访问您的Web应用/服务。

实现

据我所知,当时有其他两个PHP库可以与Google Authenticator交互。它们都可以工作,但似乎都没有更新很多,也没有采用现代的最佳实践。

这个库的优势在于可以更容易地集成到现有的库中,并内置了使用PSR-6缓存接口来减少重放攻击的可能性。

使用方法

您可以使用以下方法为您应用程序创建一个用于验证的密钥

$issuer = "MyAwesomeCorp";
$accountName = "MrsSmith";
$secretFactory = new SecretFactory();
$secret = $secretFactory->create($issuer, $accountName);

这会为您生成一个密钥。您应该:1. 将此对象传递给QrImageGenerator,以便您的用户可以将二维码扫描到手机中 2. 将密钥附加到用户的账户中,以便您可以查询它

此库中包含的唯一ImageGenerator是GoogleImageGenerator,它使用Google QR码API生成图像。如果您想使用不调用外部服务的工具,应该很容易扩展接口来构建一个base64编码的png(或类似)图像,您可以将其作为data uri包含在内。只需生成$secret->getUri()中的数据的QR码即可。

您可以使用以下方法验证用户是否成功

$googleAuth = new GoogleAuthenticator();
$googleAuth->authenticate($secret, $code);

验证将返回布尔值true/false。

如果您想使用PSR-6缓存接口来尝试防止重放攻击,可以这样做

$googleAuth = new GoogleAuthenticator();
$googleAuth->setCache($cacheItemPoolInterface);
$googleAuth->authenticate($secret, $code);

如果该代码在过去的30秒内已被使用,则返回false。

示例

这个代码的一个示例实现可以在example.php文件中找到,您可以通过以下方式运行

php example.php

这将允许您生成一个密钥,然后测试它,或者

php example.php mysecretcode

这将允许您使用现有的代码再次测试您的代码是否有效

参考

其他PHP Google Authenticator实现

Google Authenticator规范