Google2FA는 RFC 4226에 지정된 HMAC 기반 일회용 비밀번호(HOTP) 알고리즘과 RFC 6238에 지정된 시간 기반 일회용 비밀번호(TOTP) 알고리즘을 지원하는 Google 2단계 인증 모듈의 PHP 구현입니다.
이 패키지는 Google2FA의 PHP 패키지에 대한 Laravel 브리지입니다.
이 패키지의 목적은 Google2FA용 QRCode를 생성하고 사용자가 입력한 코드를 확인하는 것입니다. 백업/복구 코드 생성이 필요한 경우 아래 내용을 확인해주세요.
사용자가 분실한 계정을 복구할 수 있는 방법을 제공하기 위해 복구 또는 백업 코드를 생성해야 하는 경우 복구 패키지를 사용할 수 있습니다.
Google2FA 패키지 플레이그라운드를 확인해 보세요.
다음은 Google2FA 사용 방법을 보여주는 데모 앱입니다: google2fa-example.
Google Authenticator 앱을 사용하여 이 (이전) 데모 페이지의 QR 코드를 스캔하고 (거의) 실시간으로 변경되는 코드를 볼 수 있습니다.
라라벨 | 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
다른 작업을 수행할 필요가 없습니다. 이 패키지는 서비스 공급자를 자동으로 로드하고 새로운 자동 검색 기능을 사용하여 별칭을 생성합니다.
app/config/app.php
(Laravel 4.x) 또는 config/app.php
(Laravel 5.x)에 Service Provider 및 Facade 별칭을 추가합니다.
PragmaRXGoogle2FALaravelServiceProvider::class,'Google2FA' => PragmaRXGoogle2FALaravelFacade::class,
php artisan Vendor:publish --provider="PragmaRXGoogle2FALaravelServiceProvider"
Google2FA 사용; Google2FA::generateSecretKey() 반환;
$google2fa = app('pragmarx.google2fa');return $google2fa->generateSecretKey();
이 패키지에는 앱에서 2FA를 코딩하는 데 도움이 되는 미들웨어가 있습니다. 그것을 사용하려면 다음을 수행하면 됩니다.
보호된 $routeMiddleware = [ ...'2fa' => PragmaRXGoogle2FALaravelMiddleware::class, ];
Route::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는 사용자가 앱에서 로그오프할 때까지 영원히 지속되지만 애플리케이션 안전을 향상하기 위해 때때로 Google OTP에 대해서만 다시 요청하는 것이 좋습니다. 따라서 여기에서 분 수를 설정할 수 있습니다.
/*** 수명(분).* 사용자에게 때때로 새로운 일회용 비밀번호를 요청해야 하는 경우.*/'lifetime' => 0, // 0 = 영구
이는 백그라운드에서 Laravel 세션을 사용한다는 점을 명심하세요. 이 숫자가 config('session.lifetime')
에 설정된 값을 초과하면 OTP 수명이 만료되지 않았더라도 로그아웃됩니다.
그리고 사용자가 사이트를 탐색하는 동안 OTP를 계속 유지할지 여부를 결정할 수 있습니다.
/** * 새로운 요청이 있을 때마다 수명을 갱신합니다. */'keep_alive' => 참,
이 명령은 사용자를 로그아웃하고 다음 요청 시 2FA 양식으로 리디렉션합니다.
Google2FA::로그아웃();
Facade를 사용하지 않으려면 다음을 수행하세요.
PragmaRXGoogle2FALaravelSupportAuthenticator를 사용하세요. (new Authenticator(request()))->logout();
정말 멋진 것이 필요하지 않다면 Laravel의 경로 조절 미들웨어를 사용할 수 있습니다:
Route::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, ];
Remember를 통한 Laravel 로그인이 활성화되면 세션이 갱신되고 2FA 코드가 다시 필요합니다. 이 문제를 해결하려면 AppProvidersEventServiceProvider
에 LoginViaRemember
리스너를 추가하세요.
IlluminateAuthEventsLogin 사용; PragmaRXGoogle2FALaravelListenersLoginViaRemember 사용; 클래스 EventServiceProvider는 ServiceProvider를 확장합니다. {보호된 $listen = [ 로그인::class => [ LoginViaRemember::클래스, ], ];...
다음 이벤트가 시작됩니다.
비어있음1회 비밀번호 수신됨
로그아웃됨
로그인 실패
로그인 성공
OneTime 비밀번호가 만료되었습니다.
OneTime 비밀번호가 요청되었습니다.
기본 Google2FA 저장소에서 ReadMe 파일을 확인하세요.
패키지 테스트는 phpspec으로 작성되었습니다.
안토니오 카를로스 리베이로
Google2FA는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
끌어오기 요청과 문제는 환영할 만한 일입니다.