Google2FA คือการใช้งาน PHP ของโมดูลการตรวจสอบสิทธิ์แบบสองปัจจัยของ Google ซึ่งสนับสนุนอัลกอริทึมรหัสผ่านครั้งเดียวที่ใช้ HMAC (HOTP) ที่ระบุใน RFC 4226 และอัลกอริทึมรหัสผ่านครั้งเดียวตามเวลา (TOTP) ที่ระบุใน RFC 6238
แพ็คเกจนี้เป็นสะพาน Laravel ไปยังแพ็คเกจ PHP ของ Google2FA
จุดประสงค์ของแพ็คเกจนี้คือการสร้าง QRCodes สำหรับ Google2FA และตรวจสอบรหัสที่ผู้ใช้พิมพ์ หากคุณต้องการสร้างรหัสสำรอง/กู้คืน โปรดตรวจสอบด้านล่าง
หากคุณต้องการสร้างรหัสกู้คืนหรือสำรองเพื่อให้ผู้ใช้ของคุณสามารถกู้คืนบัญชีที่สูญหายได้ คุณสามารถใช้แพ็คเกจการกู้คืนได้
โปรดตรวจสอบสนามเด็กเล่นแพ็คเกจ Google2FA
นี่คือแอปสาธิตที่แสดงวิธีใช้ Google2FA: google2fa-example
คุณสามารถสแกนโค้ด QR บนหน้าสาธิต (เก่า) นี้ด้วยแอป Google Authenticator และดูโค้ดที่เปลี่ยนแปลง (เกือบ) แบบเรียลไทม์
ลาราเวล | 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 |
ก่อน Google2FA 2.0 (Laravel 5.1) คุณต้องติดตั้ง pragmarx/google2fa:~1.0
เนื่องจากแพ็คเกจนี้เป็นทั้งแพ็คเกจ Laravel และ PHP (ไม่เชื่อเรื่องพระเจ้า)
คลิกที่นี่เพื่อดูการสาธิตมิดเดิลแวร์:
ใช้ Composer เพื่อติดตั้ง:
composer require pragmarx/google2fa-laravel
คุณไม่จำเป็นต้องดำเนินการใดๆ อีกต่อไป แพ็คเกจนี้จะโหลดผู้ให้บริการโดยอัตโนมัติและสร้างนามแฝงโดยใช้ฟีเจอร์การค้นหาอัตโนมัติใหม่
เพิ่มผู้ให้บริการและนามแฝง Facade ให้กับ app/config/app.php
(Laravel 4.x) หรือ config/app.php
(Laravel 5.x):
PragmaRXGoogle2FALaravelServiceProvider::class,'Google2FA' => PragmaRXGoogle2FALaravelFacade::class,
ผู้ขายช่างฝีมือ php: เผยแพร่ --provider = "PragmaRXGoogle2FALaravelServiceProvider"
ใช้ Google2FA; คืน Google2FA::generateSecretKey();
$google2fa = app('pragmarx.google2fa');return $google2fa->generateSecretKey();
แพ็คเกจนี้มีมิดเดิลแวร์ซึ่งจะช่วยคุณเขียนโค้ด 2FA บนแอปของคุณ หากต้องการใช้งาน คุณเพียงแค่ต้อง:
ป้องกัน $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::class, -
เส้นทาง::get('/admin', function () {return view('admin.index'); })->มิดเดิลแวร์(['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::ออกจากระบบ();
หากคุณไม่ต้องการใช้ Facade คุณสามารถ:
ใช้ PragmaRXGoogle2FALaravelSupportAuthenticator; (ตัวรับรองความถูกต้องใหม่ (คำขอ ())) -> ออกจากระบบ ();
เว้นแต่ว่าคุณต้องการอะไรที่พิเศษจริงๆ คุณอาจใช้มิดเดิลแวร์เค้นเส้นทางของ Laravel ได้:
เส้นทาง::get('/admin', function () {return view('admin.index'); })->มิดเดิลแวร์(['auth', '2fa', 'throttle']);
$authenticator = app(Authenticator::class)->bootStateless($request);if ($authenticator->isAuthenticated()) {// otp รับรองความถูกต้องสำเร็จ!}
คุณยังสามารถใช้มิดเดิลแวร์ไร้สัญชาติได้:
ป้องกัน $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddlewareStateless::class, -
เมื่อเปิดใช้งานการเข้าสู่ระบบ Laravel ผ่านการจดจำ เซสชันจะได้รับการปรับปรุงใหม่และต้องใช้รหัส 2FA อีกครั้ง เพื่อแก้ไขปัญหานี้ ให้เพิ่มผู้ฟัง LoginViaRemember
ใน AppProvidersEventServiceProvider
ของคุณ :
ใช้ IlluminateAuthEventsLogin; ใช้ PragmaRXGoogle2FALaravelListenersLoginViaRemember; class EventServiceProvider ขยาย ServiceProvider { ป้องกัน $listen = [ เข้าสู่ระบบ::คลาส => [ เข้าสู่ระบบผ่านจำ::คลาส, - -
เหตุการณ์ต่อไปนี้เริ่มทำงาน:
ได้รับรหัสผ่าน OneTime ที่ว่างเปล่าแล้ว
ออกจากระบบแล้ว
เข้าสู่ระบบล้มเหลว
เข้าสู่ระบบสำเร็จ
รหัสผ่านครั้งเดียวหมดอายุ
ขอรหัสผ่านครั้งเดียวแล้ว
ตรวจสอบไฟล์ ReadMe ในพื้นที่เก็บข้อมูลหลักของ Google2FA
การทดสอบแพ็คเกจเขียนด้วย phpspec
อันโตนิโอ คาร์ลอส ริเบโร่
Google2FA ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT - ดูรายละเอียดในไฟล์ใบอนุญาต
คำขอดึงและปัญหาต่างๆ เป็นเรื่องที่น่ายินดีอย่างยิ่ง