makelarisjr / laravel-2fa
Requires
- php: ^7.4|^8.0
- bacon/bacon-qr-code: ^2.0
- guzzlehttp/guzzle: ^7.0
- pragmarx/google2fa: ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.2
- nunomaduro/collision: ^5.3
- nunomaduro/larastan: ^1.0
- orchestra/testbench: ^6.0
README
此包提供了实现Google OTP和Yubikey 2FA所需的所有工具。
要求
- PHP >=7.4
- Laravel >=7.0
安装
在终端/命令行中输入以下命令
composer require makelarisjr/laravel-2fa
服务提供器将自动注册。您也可以在config/app.php文件中手动添加服务提供器
'providers' => [ // ... MakelarisJR\Laravel2FA\Laravel2FAServiceProvider::class, ];
通过以下命令发布配置文件
php artisan vendor:publish --provider="MakelarisJR\Laravel2FA\Laravel2FAServiceProvider"
有关配置的更多信息,请参阅Wiki文章
接下来,您必须将必要的特质添加到可验证模型中。此包可以由任何模型使用,您不仅限于用户模型。
use MakelarisJR\Laravel2FA\Traits\Has2FA;
现在您已经设置了模型,创建一个需要用户具有有效OTP授权的所有路由的Route组。
示例
Route::group(['middleware' => ['auth', 'otp']], function(){ Route::view('/dashboard', 'dashboard') ->name('dashboard'); Route::view('/devices', 'devices') ->name('device.list'); });
您可以将otp中间件别名添加到您喜欢的任何组中。此外,如果需要刷新会话,中间件将自动提示用户输入OTP代码。如果您使用中间件,则无需实现自己的验证逻辑。
最后,运行迁移。
php artisan migrate
这将创建以下表
- otp_devices
- otp_backup_codes
- otp_remember_tokens
用法
添加设备
现在是时候向我们的模型添加新设备了。我们添加的特质提供了一个addDevice方法,该方法接受以下参数
function addDevice(string $name, string $otp_secret, string $type = OtpDevice::TYPE_GOOGLE): OtpDevice
对于类型,您可以选择以下之一
- OtpDevice::TYPE_GOOGLE
- OtpDevice::TYPE_YUBIKEY
对于Yubikey,您可以提供完整的密钥,这是44个字符,或者设备ID,这是前12个字符。包将相应地“切割”字符串。
对于Google OTP,您需要在设备上生成QR码或手动输入密钥。以下是一个简单的示例
$user = User::find(1); // ['secret' => string, 'qrcode' => string] $data = $user->generateGoogleQRCode('My Application', $user->email); $user->addDevice('My iPhone', $data['secret']);
二维码的形式为base64字符串,可以返回给用户并由手机扫描。
验证OTP
如前所述,otp中间件将处理验证而无需您自己进行操作。但是,您也可以创建自己的实现,特别是如果您计划使用像Vue、React等前端框架。
要验证用户插入的代码,请使用特质提供的以下方法
$user->verifyOtp(string $otp): bool
string $otp可以是Google身份验证器提供的代码,或者是Yubikey提供的44位数字代码,或者是备份代码之一。如果验证成功,方法将返回true,如果验证失败,则返回false。
备份代码
还可能生成备份代码,以防您丢失设备。这是一种推荐的安全做法,因为如果认证设备丢失或损坏,您将无法登录到您的账户。
要生成代码,您可以使用以下方法
$user->generateBackupCodes(int $total = 8, bool $force = false): array
第一个数字参数指定将生成的代码总数。默认值为8。第二个参数“force”(强制)指定是否生成新代码。一旦创建了备份代码,就无法再次创建,除非将force设置为true,在这种情况下,旧代码将被删除,并创建新的一批。
扩展文档
有关扩展文档,请参阅Wiki
安全漏洞
如果您在Laravel2FA中发现安全漏洞,请通过makelarisjr@hackthebox.eu发送电子邮件给makelarisjr。所有安全漏洞都将得到及时处理。
许可证
Laravel2FA是开源软件,受MIT许可证许可。