مولد لمكافحة (RFC 4226) والوقت (RFC 6238) كلمات مرور مرة واحدة (OTP). (ويعرف أيضًا باسم تطبيق Google Authenticator آخر!)
ext-curl لمزامنة خادم Steam Guard Serverext-sodium لتطبيقات الوقت الثابتة لـ BASE64 ENCODE/DECODE و HEX2BIN/BIN2HEX (يتم استخدام paragonie/constant_time_encoding كاحتفال) يتطلب الملحن
عبر المحطة: composer require chillerlan/php-authenticator
الملحن
{
"require" : {
"php" : " ^8.2 " ,
"chillerlan/php-authenticator" : " dev-main "
}
} ملاحظة: استبدل dev-main بعقيدة الإصدار ، على سبيل المثال ^5.0 - راجع الإصدارات للحصول على إصدارات صالحة
ربح!
عادة ما يتم إنشاء السر مرة واحدة أثناء عملية التنشيط في لوحة التحكم في المستخدم. لذلك كل ما عليك القيام به هو عرضه للمستخدم بطريقة مريحة - كسلسلة نصية ورمز QR على سبيل المثال - وحفظه في مكان ما مع بيانات المستخدم.
use chillerlan Authenticator { Authenticator , AuthenticatorOptions };
$ options = new AuthenticatorOptions ;
$ options -> secret_length = 32 ;
$ authenticator = new Authenticator ( $ options );
// create a secret (stored somewhere in a *safe* place on the server. safe... hahaha jk)
$ secret = $ authenticator -> createSecret ();
// you can also specify the length of the secret key, which overrides the options setting
$ secret = $ authenticator -> createSecret ( 20 );
// set an existing secret
$ authenticator -> setSecret ( $ secret ); سيتم أيضًا تخزين السر الذي تم إنشاؤه باستخدام Authenticator::createSecret() داخليًا ، بحيث لا تحتاج إلى توفير السر الذي أنشأته للتو في عمليات المتابعة مع المثيل الحالي.
الآن أثناء عملية تسجيل الدخول - بعد إدخال المستخدم بنجاح بيانات اعتماده - ستطلب منهم رمزًا لمرة واحدة للتحقق منه مقابل السر من قاعدة بيانات المستخدم الخاصة بك.
// verify the code
if ( $ authenticator -> verify ( $ otp )){
// that's it - 2FA has never been easier! :D
}تحقق من الرموز المجاورة
// try the first adjacent
$ authenticator -> verify ( $ otp , time () - $ options -> period ); // -> true
// try the second adjacent, default is 1
$ authenticator -> verify ( $ otp , time () + 2 * $ options -> period ); // -> false
// allow 2 adjacent codes
$ options -> adjacent = 2 ;
$ authenticator -> verify ( $ otp , time () + 2 * $ options -> period ); // -> true // switch mode to HOTP
$ options -> mode = AuthenticatorInterface:: HOTP ;
// user sends the OTP for code #42, which is equivalent to
$ otp = $ authenticator -> code ( 42 ); // -> 123456
// verify [123456, 42]
$ authenticator -> verify ( $ otp , $ counterValueFromUserDatabase ) // -> true من أجل عرض رمز الاستجابة السريعة لمصادقة متنقلة ، ستحتاج إلى otpauth:// uri ، والتي يمكن إنشاؤها باستخدام الطريقة التالية.
$label شيئًا يحدد الحساب الذي ينتمي إليه السر$issuer هو اسم موقع الويب الخاص بك أو شركتك على سبيل المثال ، بحيث يكون المستخدم قادرًا على تحديد حسابات متعددة. $ uri = $ authenticator -> getUri ( $ label , $ issuer );
// -> otpauth://totp/my%20label?secret=NKSOQG7UKKID4IXW&issuer=chillerlan.net&digits=6&period=30&algorithm=SHA1 ضع في اعتبارك أن العديد من إعدادات URI لم يتم التعرف عليها (بعد) حتى الآن. تحقق من wiki مصادقة Google لمزيد من المعلومات.
// code length, currently 6 or 8
$ options -> digits = 8 ;
// valid period between 15 and 60 seconds
$ options -> period = 45 ;
// set the HMAC hash algorithm
$ options -> algorithm = AuthenticatorInterface:: ALGO_SHA512 ;Authenticator| طريقة | يعود | وصف |
|---|---|---|
__construct(SettingsContainerInterface $options = null, string $secret = null) | - | |
setOptions(SettingsContainerInterface $options) | Authenticator | دعا داخليا من قبل __construct() |
setSecret(string $secret) | Authenticator | دعا داخليا من قبل __construct() |
getSecret() | string | |
createSecret(int $length = null) | string | يتجاوز $length إعداد AuthenticatorOptions |
code(int $data = null) | string | قد تكون $data عبارة عن طابع زمني UNIX (TOTP) أو قيمة مضادة (HOTP) |
verify(string $otp, int $data = null) | bool | للحصول على $data راجع Authenticator::code() |
getUri(string $label, string $issuer, int $hotpCounter = null, bool $omitSettings = null) | string |
AuthenticatorOptions | ملكية | يكتب | تقصير | مسموح | وصف |
|---|---|---|---|---|
$digits | int | 6 | 6 أو 8 | طول رمز المصادقة |
$period | int | 30 | 15 - 60 | فترة التحقق (ثانية) |
$secret_length | int | 20 | > = 16 | طول العبارة السرية (بايت ، ثنائي غير مشفر) |
$algorithm | string | SHA1 | SHA1 ، SHA256 أو SHA512 | خوارزمية تجزئة HMAC ، راجع AuthenticatorInterface::HASH_ALGOS |
$mode | string | totp | totp ، hotp ، battlenet أو steam | وضع المصادقة: الوقت أو العداد ، راجع AuthenticatorInterface::MODES |
$adjacent | int | 1 | > = 0 | عدد الرموز المجاورة المسموح بها |
$time_offset | int | 0 | * | إزاحة الوقت الثابتة التي سيتم إضافتها إلى القيمة الزمنية الحالية |
$useLocalTime | bool | حقيقي | * | سواء كنت تستخدم الوقت المحلي أو وقت الطلب خادم |
$forceTimeRefresh | bool | خطأ شنيع | * | ما إذا كان يجب إجبار وقت الخادم المنعش على كل مكالمة |
AuthenticatorInterface | طريقة | يعود | وصف |
|---|---|---|
setOptions(SettingsContainerInterface $options) | AuthenticatorInterface | |
setSecret(string $encodedSecret) | AuthenticatorInterface | |
getSecret() | string | |
createSecret(int $length = null) | string | |
getServertime() | int | |
getCounter(int $data = null) | int | داخلي |
getHMAC(int $counter) | string | داخلي |
getCode(string $hmac) | int | داخلي |
getOTP(int $code) | string | داخلي |
code(int $data = null) | string | |
verify(string $otp, int $data = null) | bool |
| ثابت | يكتب | وصف |
|---|---|---|
TOTP | string | |
HOTP | string | |
STEAM_GUARD | string | |
ALGO_SHA1 | string | |
ALGO_SHA256 | string | |
ALGO_SHA512 | string | |
MODES | array | خريطة الوضع -> className |
HASH_ALGOS | array | قائمة خوارزميات التجزئة المتاحة |