Google2FA 是 Google 双因素身份验证模块的 PHP 实现,支持 RFC 4226 中指定的基于 HMAC 的一次性密码 (HOTP) 算法和 RFC 6238 中指定的基于时间的一次性密码 (TOTP) 算法。
这个包是 Laravel 与 Google2FA 的 PHP 包的桥梁。
该包的目的是为 Google2FA 创建 QRCodes 并检查用户输入的代码。如果您需要创建备份/恢复代码,请检查以下内容。
如果您需要创建恢复或备份代码来为您的用户提供恢复丢失帐户的方法,您可以使用恢复包。
请检查 Google2FA Package Playground。
这是一个演示应用程序,展示了如何使用 Google2FA:google2fa-example。
您可以使用 Google Authenticator 应用程序扫描此(旧)演示页面上的二维码,并(几乎)实时查看代码更改。
拉维尔 | 谷歌2FA | Google2FA-Laravel |
---|---|---|
4.2 | <= 1.0.1 | |
5.0-5.1 | <= 1.0.1 | |
5.2-10.x | >= 2.0.0 | >= 0.2.0 |
在 Google2FA 2.0 (Laravel 5.1) 之前,您必须安装pragmarx/google2fa:~1.0
,因为这个包既是 Laravel 包又是 PHP(不可知)。
点击此处查看中间件演示:
使用 Composer 来安装它:
composer require pragmarx/google2fa-laravel
您无需执行任何其他操作,此包会使用新的自动发现功能自动加载服务提供程序并创建别名。
将 Service Provider 和 Facade 别名添加到app/config/app.php
(Laravel 4.x) 或config/app.php
(Laravel 5.x) 中:
PragmaRXGoogle2FALaravelServiceProvider::class,'Google2FA' => PragmaRXGoogle2FALaravelFacade::class,
php artisan 供应商:发布 --provider="PragmaRXGoogle2FALaravelServiceProvider"
使用 Google2FA;返回 Google2FA::generateSecretKey();
$google2fa = app('pragmarx.google2fa');返回 $google2fa->generateSecretKey();
该软件包有一个中间件,可帮助您在应用程序上编写 2FA 代码。要使用它,您只需:
受保护的$routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::类, ];
路线::get('/admin', function () {return view('admin.index'); })->中间件(['auth', '2fa']);
该包使用 Google2FA-QRCode 包,请检查它以获取有关如何为您的用例配置正确的 QRCode 生成器的更多信息。
有三种可用: imagemagick (默认)、 svg和eps 。
您可以通过配置更改它:
/* * 使用哪个图像后端来生成二维码? * * 支持 imagemagick、svg 和 eps */'qrcode_image_backend' => PragmaRXGoogle2FALaravelSupportConstants::QRCODE_IMAGE_BACKEND_IMAGEMAGICK,
或者运行时:
Google2FA::setQRCodeBackend('svg');
您可以在配置文件 (config/google2fa.php) 中设置“询问一次性密码”视图:
/** * 一次性密码查看 */'view' => 'google2fa.index',
在视图中,您只需提供一个包含输入的表单,该表单也是可配置的:
/** * 一次性密码请求输入名称 */'otp_input' => 'one_time_password',
这是一个表单示例:
<form action="/google2fa/authenticate" method="POST"><input name="one_time_password" type="text"><button type="submit">身份验证</button></form>
通常 OTP 会永远持续,直到用户注销您的应用程序为止,但是,为了提高应用程序安全性,您可能需要不时地重新询问(仅针对 Google OTP)。所以你可以在这里设置分钟数:
/*** 生命周期以分钟为单位。* 如果您需要时不时地要求用户输入新的一次性密码。*/'lifetime' => 0, // 0 = 永恒
请记住,这在后台使用 Laravel 会话。如果此数字超过config('session.lifetime')
中设置的值,即使您的 OTP 生命周期尚未过期,您仍将被注销。
您可以决定您的 OTP 在您的用户浏览网站时是否保持活动状态:
/** * 在每个新请求时更新生命周期。 */'keep_alive' => true,
此命令将注销您的用户并在下一个请求时将他/她重定向到 2FA 表单:
Google2FA::注销();
如果您不想使用 Facade,您可以:
使用 PragmaRXGoogle2FALaravelSupportAuthenticator; (新的身份验证器(请求()))->注销();
除非你需要一些非常奇特的东西,否则你可以使用 Laravel 的路由节流中间件来实现:
路线::get('/admin', function () {return view('admin.index'); })->中间件(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// otp 身份验证成功!}
您还可以使用无状态中间件:
受保护的$routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::class, ];
当 Laravel 通过记住登录被激活时,会话将被更新,并且再次需要 2FA 代码。要解决此问题,请在AppProvidersEventServiceProvider
中添加LoginViaRemember
侦听器:
使用 IlluminateAuthEventsLogin;使用 PragmaRXGoogle2FALaravelListenersLoginViaRemember;类 EventServiceProvider 扩展 ServiceProvider {受保护的$听= [ 登录::类 => [ LoginViaRemember::类, ], ];...
会触发以下事件:
收到空一次性密码
登出
登录失败
登录成功
一次性密码已过期
请求一次性密码
检查 Google2FA 主存储库中的自述文件。
包测试是用 phpspec 编写的。
安东尼奥·卡洛斯·里贝罗
Google2FA 根据 MIT 许可证获得许可 - 有关详细信息,请参阅许可证文件
拉取请求和问题非常受欢迎。