라이브러리 구하기
아래 github 만 참고하면 간단히 구현할 수 있다.
아래 파일을 다운로드하고 include 한다.
예제 테스트
테스트 파일을 아래와 같이 작성한다.
<?php
require_once 'GoogleAuthenticator.php';
$ga = new GoogleAuthenticator();
$secret = $ga->createSecret();
echo "Secret is: ".$secret."<br>";
$qrCodeUrl = $ga->getQRCodeGoogleUrl('Admin', $secret, 'Blog');
echo "Google Charts URL for the QR-Code: ".$qrCodeUrl."<br>";
$oneCode = $ga->getCode($secret);
echo "Checking Code '$oneCode' and Secret '$secret'<br>";
$checkResult = $ga->verifyCode($secret, $oneCode, 2); // 2 = 2*30sec clock tolerance
if ($checkResult) {
echo 'OK';
} else {
echo 'FAILED';
}
?>
<br>
<img src="<?=$qrCodeUrl?>">
결과는 아래와 같다.
Google Authenticator 앱으로 위 QR 코드를 스캔해 보면 아래와 같이 등록된다.
메소드별 부연 설명
createSecret()
- PXAGJ73SV44CKV27
설정 키를 생성한다.
해당 유저의 고유한 일련번호이다. 해당 유저에 대한 지속적인 인증 처리를 위해서는 DB 에 기록해야 한다.
DB 에 기록하지 않으려면 유저 아이디 또는 이메일 주소를 인코딩하여 생성하는 방법이 있다(해당 메소드를 쓰지 않고).
유저 입장에서는 키를 직접 입력하여 OTP 등록을 할 수도 있다(QR 코드를 스캔하지 않고).
getQRCodeGoogleUrl($name, $secret, $title = null, $params = array())
- https://api.qrserver.com/v1/create...(생략)
QR 코드 이미지 URL 을 생성한다.
예전에는 구글이 직접 서비스하는 chart.googleapis.com 페이지가 있었으나 중지되었다.
따라서 api.qrserver.com 또는 image-charts.com 등의 서비스를 가져다 써야한다.
$name, $title 은 보다시피 앱에 표시(저장)하는 용도이다.
getCode($secret, $timeSlice = null)
- 340072
미리 생성한 설정 키로 현재 유효한(최대 60초) 인증 키를 조회한다.
유저가 input 에 키를 입력하고 실제 검사하는 로직에서 비교하면 끝.
'코딩 > PHP' 카테고리의 다른 글
php - 소요시간 계산(초, 분 단위) (0) | 2024.07.09 |
---|---|
스마트 에디터 2 (se2) - 한글 이미지 깨지는 문제 해결 (0) | 2024.06.25 |
PHP - 같은 항목 테이블 셀 병합 (rowspan) (0) | 2023.06.23 |
PHP - date 함수 인자 정리 (Y-m-d 등) (0) | 2023.01.30 |
자주 쓰는 것들 (1) | 2023.01.19 |