jmrashed / two-factor-auth
使用Laravel Two-Factor Authentication (2FA)包增强您的Laravel应用程序的安全性
Requires
- php: ^8.1
- ext-json: *
- bacon/bacon-qr-code: 2.*
- illuminate/auth: 10.*|11.*
- illuminate/config: 10.*|11.*
- illuminate/database: 10.*|11.*
- illuminate/http: 10.*|11.*
- illuminate/support: 10.*|11.*
- illuminate/validation: 10.*|11.*
- laragear/meta: 3.*
- laragear/meta-model: ^1.1
- paragonie/constant_time_encoding: ^2.6
README
概览
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 上贡献力量或报告问题。您的反馈和贡献非常受赞赏!
贡献
我们欢迎每个人的贡献!无论您是在修复拼写错误、添加功能还是提出改进建议,您的贡献都受到重视和赞赏。
遵循以下指南
如果您是首次为开源项目贡献力量,请不要担心!以下是如何开始的步骤
- 分叉仓库。
- 将您分叉的仓库克隆到您的本地机器。
- 为您的更改创建一个新的分支。
- 进行更改,并使用清晰且描述性的消息提交它们。
- 将您的更改推送到您分叉的仓库。
- 向主仓库提交拉取请求。
行为准则
请注意,我们有一份 行为准则,以确保为每个人提供一个欢迎和包容的环境。通过参与此项目,您同意遵守其条款。
反馈
您的反馈对于改进此包至关重要。如果您遇到任何问题、有新功能的想法或只是想分享您的想法,请请在 GitHub 上打开一个问题。
感谢您的贡献!我们可以共同努力使此包变得更好。
文档
探索我们的全面文档,了解更多关于使用双因素认证包的信息。
- 文档:访问详细指南、教程和 API 参考,了解如何有效地集成和利用双因素认证包。
我们的文档不断更新,以提供最新的信息和最佳实践。如果您有任何问题或需要进一步的帮助,请随时联系或打开 GitHub 上的问题。我们在这里帮助您成功满足您的认证需求。