Google2FA هو تطبيق PHP لوحدة المصادقة الثنائية من Google، ويدعم خوارزمية كلمة المرور لمرة واحدة المستندة إلى HMAC (HOTP) المحددة في RFC 4226 وخوارزمية كلمة المرور المستندة إلى الوقت (TOTP) المحددة في RFC 6238.
هذه الحزمة عبارة عن جسر Laravel لحزمة PHP الخاصة بـ Google2FA.
الهدف من هذه الحزمة هو إنشاء QRCodes لـ Google2FA والتحقق من الرموز المكتوبة بواسطة المستخدم. إذا كنت بحاجة إلى إنشاء رموز النسخ الاحتياطي/الاسترداد، يرجى التحقق أدناه.
إذا كنت بحاجة إلى إنشاء رموز استرداد أو نسخ احتياطي لتوفير طريقة للمستخدمين لاسترداد حساب مفقود، فيمكنك استخدام حزمة الاسترداد.
يرجى التحقق من ملعب حزمة Google2FA.
فيما يلي تطبيق تجريبي يوضح كيفية استخدام Google2FA: google2fa-example.
يمكنك مسح رمز الاستجابة السريعة ضوئيًا على هذه الصفحة التجريبية (القديمة) باستخدام تطبيق Google Authenticator وعرض الرمز المتغير (تقريبًا) في الوقت الفعلي.
لارافيل | Google2FA | Google2FA-لارافيل |
---|---|---|
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
ليس عليك القيام بأي شيء آخر، فهذه الحزمة تقوم بالتحميل التلقائي لموفر الخدمة وإنشاء الاسم المستعار، باستخدام ميزة الاكتشاف التلقائي الجديدة.
أضف مقدم الخدمة والاسم المستعار للواجهة إلى app/config/app.php
(Laravel 4.x) أو config/app.php
(Laravel 5.x):
PragmaRXGoogle2FALaravelServiceProvider::class,'Google2FA' => PragmaRXGoogle2FALaravelFacade::class,
بائع PHP الحرفي: نشر --provider="PragmaRXGoogle2FALaravelServiceProvider"
استخدم Google2FA;return Google2FA::generateSecretKey();
$google2fa = app('pragmarx.google2fa');return $google2fa->generateSecretKey();
تحتوي هذه الحزمة على برنامج وسيط سيساعدك على ترميز المصادقة الثنائية (2FA) على تطبيقك. لاستخدامه، عليك فقط:
محمية $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::class, ];
الطريق::get('/admin', function () {return view('admin.index'); })->middleware(['auth', '2fa']);
تستخدم هذه الحزمة حزمة Google2FA-QRCode، يرجى التحقق منها للحصول على مزيد من المعلومات حول كيفية تكوين مولدات QRCode المناسبة لحالة الاستخدام الخاصة بك.
هناك ثلاثة ملفات متاحة: imagemagick (افتراضي)، و svg ، و eps .
يمكنك تغييره عبر التكوين:
/* * ما هي الصورة الخلفية التي يجب استخدامها لإنشاء رموز QR؟ * * يدعم 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) إلى الأبد، حتى يقوم المستخدم بتسجيل الخروج من تطبيقك، ولكن لتحسين أمان التطبيق، قد ترغب في إعادة المطالبة بكلمة مرور لمرة واحدة (OTP) من Google فقط، من وقت لآخر. لذلك يمكنك ضبط عدد من الدقائق هنا:
/*** مدى الحياة في دقائق.* في حالة رغبتك في مطالبة المستخدمين بكلمات مرور جديدة لمرة واحدة من وقت لآخر.*/'lifetime' => 0, // 0 = الأبدي
ضع في اعتبارك أن هذا يستخدم جلسات Laravel في الخلفية. إذا تجاوز هذا الرقم القيمة المحددة في config('session.lifetime')
فسوف تظل قيد تسجيل الخروج، حتى لو لم تنته مدة صلاحية كلمة المرور لمرة واحدة (OTP).
ويمكنك أن تقرر ما إذا كان سيتم إبقاء كلمة المرور لمرة واحدة (OTP) الخاصة بك قيد التشغيل أثناء تصفح المستخدمين للموقع أم لا:
/** * تجديد مدى الحياة عند كل طلب جديد. */'keep_alive' => صحيح،
سيقوم هذا الأمر بتسجيل خروج المستخدم الخاص بك وإعادة توجيهه إلى نموذج المصادقة الثنائية (2FA) عند الطلب التالي:
Google2FA::logout();
إذا كنت لا ترغب في استخدام الواجهة، فيمكنك:
استخدم PragmaRXGoogle2FALaravelSupportAuthenticator؛ (new Authenticator(request()))->logout();
ما لم تكن بحاجة إلى شيء فاخر حقًا، فربما يمكنك استخدام البرنامج الوسيط لخانق المسار الخاص بـ Laravel لتحقيق ذلك:
الطريق::get('/admin', function () {return view('admin.index'); })->middleware(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// نجاح مصادقة otp!}
يمكنك أيضًا استخدام برنامج وسيط عديم الحالة:
محمية $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::class, ];
عندما يتم تنشيط تسجيل الدخول إلى Laravel عبر التذكر، يتم تجديد الجلسة ويطلب رمز المصادقة الثنائية (2FA) مرة أخرى. لحل هذه المشكلة، قم بإضافة مستمع LoginViaRemember
في AppProvidersEventServiceProvider
الخاص بك:
استخدم IlluminateAuthEventsLogin;use PragmaRXGoogle2FALaravelListenersLoginViaRemember;class EventServiceProvider يمتد ServiceProvider {محمي $ الاستماع = [ تسجيل الدخول::الفئة => [ تسجيل الدخولفياتذكر::class, ]، ];...
يتم إطلاق الأحداث التالية:
تم استلام كلمة المرور الفارغة
تم تسجيل الخروج
فشل تسجيل الدخول
تم تسجيل الدخول بنجاح
انتهت صلاحية كلمة مرور OneTime
تم طلب كلمة مرور لمرة واحدة
تحقق من الملف التمهيدي في مستودع Google2FA الرئيسي.
تمت كتابة اختبارات الحزمة باستخدام phpspec.
أنطونيو كارلوس ريبيرو
تم ترخيص Google2FA بموجب ترخيص MIT - راجع ملف الترخيص للحصول على التفاصيل
طلبات السحب والقضايا هي موضع ترحيب كبير.