Google2FA adalah implementasi PHP dari Modul Otentikasi Dua Faktor Google, mendukung algoritma Kata Sandi Satu Kali Berbasis HMAC (HOTP) yang ditentukan dalam RFC 4226 dan algoritma Kata Sandi Satu Kali Berbasis Waktu (TOTP) yang ditentukan dalam RFC 6238.
Paket ini merupakan jembatan Laravel ke paket PHP Google2FA.
Maksud dari paket ini adalah untuk membuat QRCodes untuk Google2FA dan memeriksa kode yang diketik pengguna. Jika Anda perlu membuat kode cadangan/pemulihan, silakan periksa di bawah.
jika Anda perlu membuat kode pemulihan atau cadangan untuk memberikan cara bagi pengguna Anda memulihkan akun yang hilang, Anda dapat menggunakan Paket Pemulihan.
Silakan periksa Playground Paket Google2FA.
Berikut adalah aplikasi demo yang menunjukkan cara menggunakan Google2FA: google2fa-example.
Anda dapat memindai kode QR di halaman demo (lama) ini dengan aplikasi Google Authenticator dan melihat perubahan kode (hampir) secara real-time.
Laravel | Google2FA | Google2FA-Laravel |
---|---|---|
4.2 | <= 1.0.1 | |
5.0-5.1 | <= 1.0.1 | |
5.2-10.x | >= 2.0.0 | >= 0.2.0 |
Sebelum Google2FA 2.0 (Laravel 5.1) Anda harus menginstal pragmarx/google2fa:~1.0
, karena paket ini merupakan paket Laravel dan PHP (agnostik).
Klik di sini untuk melihat demo middleware:
Gunakan Komposer untuk menginstalnya:
composer require pragmarx/google2fa-laravel
Anda tidak perlu melakukan apa pun lagi, paket ini memuat Penyedia Layanan secara otomatis dan membuat Alias, menggunakan fitur Penemuan Otomatis yang baru.
Tambahkan Penyedia Layanan dan alias Fasad ke app/config/app.php
Anda (Laravel 4.x) atau config/app.php
(Laravel 5.x):
PragmaRXGoogle2FALaravelServiceProvider::class,'Google2FA' => PragmaRXGoogle2FALaravelFacade::class,
vendor tukang php:publish --provider="PragmaRXGoogle2FALaravelServiceProvider"
gunakan Google2FA;kembalikan Google2FA::generateSecretKey();
$google2fa = aplikasi('pragmarx.google2fa');kembalikan $google2fa->generateSecretKey();
Paket ini memiliki middleware yang akan membantu Anda membuat kode 2FA pada aplikasi Anda. Untuk menggunakannya, Anda hanya perlu:
dilindungi $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::kelas, ];
Rute::dapatkan('/admin', fungsi () {return view('admin.index'); })->middleware(['auth', '2fa']);
Paket ini menggunakan paket Google2FA-QRCode, silakan periksa untuk informasi lebih lanjut tentang cara mengonfigurasi generator QRCode yang tepat untuk kasus penggunaan Anda.
Ada tiga yang tersedia: imagemagick (default), svg dan eps .
Anda dapat mengubahnya melalui konfigurasi:
/* * Backend gambar mana yang digunakan untuk membuat kode QR? * * Mendukung imagemagick, svg dan eps */'qrcode_image_backend' => PragmaRXGoogle2FALaravelSupportConstants::QRCODE_IMAGE_BACKEND_IMAGEMAGICK,
Atau waktu proses:
Google2FA::setQRCodeBackend('svg');
Anda dapat mengatur tampilan 'minta kata sandi satu kali' di file konfigurasi (config/google2fa.php):
/** * Tampilan Kata Sandi Sekali Pakai */'view' => 'google2fa.index',
Dan dalam tampilan Anda hanya perlu menyediakan formulir yang berisi masukan, yang juga dapat dikonfigurasi:
/** * Nama masukan permintaan Kata Sandi Satu Kali */'otp_input' => 'kata sandi_satu kali',
Berikut ini contoh formulir:
<form action="/google2fa/authenticate" method="POST"><input name="one_time_password" type="text"><button type="submit">Otentikasi</button></form>
Biasanya OTP berlaku selamanya, hingga pengguna keluar dari aplikasi Anda, namun, untuk meningkatkan keamanan aplikasi, Anda mungkin ingin menanyakan ulang, hanya untuk OTP Google, dari waktu ke waktu. Jadi, Anda dapat menyetel jumlah menit di sini:
/*** Seumur hidup dalam hitungan menit.* Jika Anda ingin pengguna Anda dimintai kata sandi baru satu kali dari waktu ke waktu.*/'lifetime' => 0, // 0 = abadi
Perlu diingat bahwa ini menggunakan sesi Laravel di latar belakang. Jika angka ini melebihi nilai yang ditetapkan di config('session.lifetime')
Anda akan tetap logout, meskipun masa pakai OTP Anda belum berakhir.
Dan Anda dapat memutuskan apakah OTP Anda akan tetap aktif saat pengguna menjelajahi situs atau tidak:
/** * Perpanjang masa pakai pada setiap permintaan baru. */'keep_alive' => benar,
Perintah ini akan mengeluarkan pengguna Anda dan mengarahkannya ke formulir 2FA pada permintaan berikutnya:
Google2FA::logout();
Jika Anda tidak ingin menggunakan Fasad, Anda dapat:
gunakan PragmaRXGoogle2FALaravelSupportAuthenticator; (Otentikator baru(permintaan()))->logout();
Kecuali Anda memerlukan sesuatu yang sangat mewah, Anda mungkin dapat menggunakan middleware throttle rute Laravel untuk itu:
Rute::dapatkan('/admin', fungsi () {return view('admin.index'); })->middleware(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// otp auth sukses!}
Anda juga dapat menggunakan middleware tanpa kewarganegaraan:
dilindungi $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::kelas, ];
Ketika login Laravel melalui ingat diaktifkan, sesi direnovasi dan kode 2FA diperlukan lagi. Untuk mengatasinya, tambahkan pendengar LoginViaRemember
di AppProvidersEventServiceProvider
Anda :
gunakan IlluminateAuthEventsLogin; gunakan PragmaRXGoogle2FALaravelListenersLoginViaRemember; class EventServiceProvider memperluas ServiceProvider {dilindungi $listen = [ Masuk::kelas => [ MasukViaIngat::kelas, ], ];...
Peristiwa berikut ini dipicu:
Kata Sandi KosongSatu Waktu Diterima
Keluar
Gagal Masuk
Masuk Berhasil
OneTimePassword Kedaluwarsa
OneTimePasswordDiminta
Periksa file ReadMe di repositori utama Google2FA.
Tes paket ditulis dengan phpspec.
Antonio Carlos Ribeiro
Google2FA dilisensikan di bawah Lisensi MIT - lihat file LISENSI untuk detailnya
Permintaan tarik dan masalah sangat diterima.