makelarisjr/laravel-2fa

1.6 2024-02-06 10:26 UTC

This package is auto-updated.

Last update: 2024-09-06 11:43:38 UTC


README

此包提供了实现Google OTP和Yubikey 2FA所需的所有工具。

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require

要求

  • 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中间件将处理验证而无需您自己进行操作。但是,您也可以创建自己的实现,特别是如果您计划使用像VueReact等前端框架。

要验证用户插入的代码,请使用特质提供的以下方法

$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许可证许可。