jmrashed/two-factor-auth

使用Laravel Two-Factor Authentication (2FA)包增强您的Laravel应用程序的安全性

1.0.2 2024-05-25 14:43 UTC

This package is auto-updated.

Last update: 2024-09-25 15:30:41 UTC


README

Stable Version License Total Downloads GitHub Stars GitHub Forks

概览

Laravel Two-Factor Authentication (2FA)包通过实现用户认证的双因素认证,为增强Laravel应用程序的安全性提供了一种无缝的方式。支持多种认证方法和可定制的配置选项,此包为开发人员提供了一个强大的解决方案,以保护用户账户免受未经授权的访问。

主要功能

  • 多种2FA方法:支持包括短信、电子邮件、TOTP(基于时间的单次密码)等多种双因素认证方法。

  • 可定制配置:允许开发人员根据应用程序的要求配置2FA设置,包括启用/禁用特定的认证方法,设置恢复选项,并定义访问策略。

  • 无缝集成:与Laravel的认证系统无缝集成,使得在不进行大量修改的情况下,轻松将双因素认证添加到现有的Laravel应用程序中。

  • 用户友好界面:提供直观的用户界面,用于启用、禁用和管理双因素认证设置,确保账户安全管理体验流畅。

  • 全面文档:提供全面的文档,包括安装说明、使用指南、配置选项以及Laravel应用程序中实现和管理双因素认证的最佳实践。

为什么使用Laravel 2FA

  • 增强安全性:保护用户账户免受常见的安全威胁,如密码泄露、钓鱼攻击和未经授权的访问尝试。

  • 合规要求:帮助满足保护敏感用户数据并确保各行业合规性要求的合规性。

  • 用户信任和信心:通过为用户账户提供额外的安全层,建立用户信任和信心,从而提高用户满意度和忠诚度。

入门

要开始使用Laravel 2FA,请通过Composer安装包,并按照文档中提供的安装和配置说明进行操作。只需几个简单步骤,您就可以增强Laravel应用程序的安全性,并让用户放心,知道他们的账户得到了良好的保护。

要求

  • PHP >= 8.1
  • Laravel >= 10.x
  • Composer(用于包安装)

请确保您的服务器环境满足以下要求

  • PHP版本:该包需要PHP 8.1或更高版本才能正常运行。您可以在终端中运行php -v来检查您的PHP版本。

  • Laravel版本:该包与Laravel 10.x或更高版本兼容。请确保您的Laravel应用程序使用指定版本或更高版本,以确保无缝集成。

  • Composer:需要Composer来安装包和管理其依赖项。如果您尚未安装Composer,可以从composer下载并安装它。

在继续安装之前,请验证您的服务器环境是否满足这些要求,以确保兼容性和双因素认证包的平稳运行。

安装

您可以通过在终端中运行以下命令来通过Composer安装Laravel Two-Factor Authentication (2FA)包:

composer require jmrashed/two-factor-auth

安装包后,Laravel 会自动发现服务提供者。如果你使用的是 Laravel 5.5 或更高版本,包将自动发现。对于较老版本的 Laravel,你可能需要在 config/app.php 文件中手动注册服务提供者

'providers' => [
    // Other Service Providers
    Jmrashed\TwoFactorAuth\TwoFactorAuthServiceProvider::class,
],

工作原理

Laravel 双因素认证(2FA) 包引入了一种灵活的机制,通过增加一层安全层来增强用户认证。以下是其工作方式:

1. 合同集成

该包无缝集成了一个合同,用于确定在成功验证凭证后,用户是否应该采用双因素认证(2FA)作为补充认证措施。

2. 自定义视图和辅助函数

该包包含用于在登录尝试期间管理双因素认证(2FA)的自定义视图和辅助函数。这些资源简化了 2FA 的实现,无需额外的中间件或新的守卫。然而,高级用户可以选择手动自定义认证过程。

3. 无中间件依赖

与一些替代方案不同,该包不依赖于中间件。虽然它提供了一种简化的设置,但它还允许用户根据其特定要求手动配置认证过程。

4. 可扩展性

该包旨在可扩展,以适应未来的增强和定制。它为用户提供了一个基础,用户可以在其 Laravel 应用程序中构建附加功能或与其他部分集成。

设置

步骤 - 01

首先,使用以下 Artisan 命令将必要的组件安装到你的 Laravel 应用程序中,包括迁移、翻译、视图和配置:

php artisan two-factor-auth:install

提示

在运行之前,你可以自定义迁移,例如添加新列或更改表名。有关更多详细信息,请参阅 迁移文档

安装后,使用标准的 Artisan migrate 命令迁移数据库表

php artisan migrate

步骤 - 02

双因素认证 功能集成到你的 User 模型或任何其他你想要启用双因素认证的模型中。只需将 TwoFactorAuthenticatable 合同和 TwoFactorAuthentication 特性添加到模型中,如下所示:

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Jmrashed\TwoFactorAuth\TwoFactorAuthentication;
use Jmrashed\TwoFactorAuth\Contracts\TwoFactorAuthenticatable;

class User extends Authenticatable implements TwoFactorAuthenticatable
{
    use TwoFactorAuthentication;

    // Additional model code...
}

提示

TwoFactorAuthenticatable 合同用于识别使用双因素认证的模型,而 TwoFactorAuthentication 特性提供了方便的方法来管理双因素认证。

就这样!你的应用程序现在可以用于增强安全性的双因素认证。

启用双因素认证

为了为用户启用双因素认证,他们必须将他们的认证器应用程序与应用程序之间的共享密钥同步。

提示

流行的免费认证器应用程序包括 iOS 认证器、FreeOTP、Authy 和 Google 认证器等。

首先,使用 createTwoFactorAuth() 方法生成所需的数据。此方法返回一个可序列化的共享密钥,可以在视图中将其显示为字符串或 QR 码(编码为 SVG)。

use Illuminate\Http\Request;

public function prepareTwoFactor(Request $request)
{
    $secret = $request->user()->createTwoFactorAuth();

    return view('user.2fa', [
        'qr_code' => $secret->toQr(),     // QR Code
        'uri'     => $secret->toUri(),    // "otpauth://" URI
        'string'  => $secret->toString(), // Secret as string
    ]);
}

接下来,用户必须使用他们的认证器应用程序生成的代码确认共享密钥,使用 confirmTwoFactorAuth() 方法,如果代码有效,则将自动启用双因素认证。

use Illuminate\Http\Request;

public function confirmTwoFactor(Request $request)
{
    $request->validate([
        'code' => 'required|numeric'
    ]);
    $activated = $request->user()->confirmTwoFactorAuth($request->code);
    // Additional logic...
}

如果用户没有提供正确的代码,该方法将返回 false,提示他们检查设备的时间区域或生成新的共享密钥。

恢复码

作为备份认证方法,恢复码在启用双因素认证时自动生成。默认情况下,创建包含十个一次使用 8 位字符码的集合。

你可以使用 getRecoveryCodes() 方法检索这些码。

use Illuminate\Http\Request;

public function confirmTwoFactor(Request $request)
{
    if ($request->user()->confirmTwoFactorAuth($request->code)) {
        return $request->user()->getRecoveryCodes();
    }
    return 'Try again!';
}

确保在启用双因素认证后向用户提供他们的恢复码,并建议他们安全地存储它们。可以使用 generateRecoveryCodes() 方法生成新的码组,以替换之前的码组。

use Illuminate\Http\Request;

public function showRecoveryCodes(Request $request)
{
    return $request->user()->generateRecoveryCodes();
}

重要

应鼓励用户在耗尽当前码组或变得不活跃时生成新的恢复码。

登录

为了实现无缝的用户认证,使用该包提供的 Auth2FA 门面,它支持双因素认证,并处理认证过程。

提示

对于 Laravel UI 或 Laravel Breeze,请参阅包文档以获取特定的集成说明。

在您的登录控制器中,使用用户的凭据调用 Auth2FA::attempt() 方法。如果需要双因素认证,用户将被提示输入他们的双因素认证码。

use Jmrashed\TwoFactorAuth\Facades\Auth2FA;
use Illuminate\Http\Request;

public function login(Request $request)
{
    // Validate user credentials
     $attempt = Auth2FA::attempt($request->only('email', 'password'));
    if ($attempt) {
        return 'You are logged in!';
    }
    return 'Hey, you should make an account!';
}

此包使用 6 位数字码进行 TOTP 认证。无需外部 API。

作者

此包由 jmrashed 维护,他是一位热衷于提升 Laravel 开发体验的充满热情的开发者。

请随时在 GitHub 上贡献力量或报告问题。您的反馈和贡献非常受赞赏!

贡献

我们欢迎每个人的贡献!无论您是在修复拼写错误、添加功能还是提出改进建议,您的贡献都受到重视和赞赏。

遵循以下指南

如果您是首次为开源项目贡献力量,请不要担心!以下是如何开始的步骤

  1. 分叉仓库。
  2. 将您分叉的仓库克隆到您的本地机器。
  3. 为您的更改创建一个新的分支。
  4. 进行更改,并使用清晰且描述性的消息提交它们。
  5. 将您的更改推送到您分叉的仓库。
  6. 向主仓库提交拉取请求。

行为准则

请注意,我们有一份 行为准则,以确保为每个人提供一个欢迎和包容的环境。通过参与此项目,您同意遵守其条款。

反馈

您的反馈对于改进此包至关重要。如果您遇到任何问题、有新功能的想法或只是想分享您的想法,请请在 GitHub 上打开一个问题。

感谢您的贡献!我们可以共同努力使此包变得更好。

文档

探索我们的全面文档,了解更多关于使用双因素认证包的信息。

  • 文档:访问详细指南、教程和 API 参考,了解如何有效地集成和利用双因素认证包。

我们的文档不断更新,以提供最新的信息和最佳实践。如果您有任何问题或需要进一步的帮助,请随时联系或打开 GitHub 上的问题。我们在这里帮助您成功满足您的认证需求。