고양이 여름이의 지식채널

PHP JWT 라이브러리 사용법과 예제 본문

Programming/PHP

PHP JWT 라이브러리 사용법과 예제

썸머캣 2023. 4. 12. 23:41

JSON Web Token(JWT)은 인터넷에서 정보를 안전하게 전송하기 위해 사용되는 표준 방식입니다. JWT는 Base64 인코딩된 JSON 객체로 구성되며, 토큰의 정보는 디지털 서명을 통해 안전하게 전송됩니다. 이번 포스팅에서는 PHP에서 JWT를 사용하여 인증을 구현하는 방법과 예제를 알아보도록 하겠습니다.


 

JWT 라이브러리 설치

PHP에서 JWT를 사용하려면 먼저 JWT 라이브러리를 설치해야 합니다. 여러 가지 JWT 라이브러리가 있지만, 이번 포스팅에서는 firebase/php-jwt 라이브러리를 사용하겠습니다. composer를 사용하여 firebase/php-jwt 라이브러리를 설치할 수 있습니다.

composer require firebase/php-jwt

 

JWT 생성하기

JWT를 생성하는 방법은 다음과 같습니다.

<?php
use Firebase\JWT\JWT;

$key = "secret_key";
$payload = array(
    "user_id" => 1,
    "username" => "MESSI",
    "email" => "MESSI@example.com"
);

$jwt = JWT::encode($payload, $key);
echo $jwt;
?>

firebase/php-jwt 라이브러리를 사용하여 JWT를 생성합니다. $key 변수는 JWT의 비밀 키입니다. $payload 변수는 JWT에 포함될 데이터입니다. JWT::encode() 함수를 사용하여 JWT를 생성합니다.

 

JWT 검증하기

JWT를 검증하는 방법은 다음과 같습니다.

<?php
use Firebase\JWT\JWT;

$key = "secret_key";
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImpvaG5fZG9lIiwiZW1haWwiOiJqb2huX2RvZUBleGFtcGxlLmNvbSJ9.z2QzKvE5liYJ8e4zfCXH7Lx4J6Uz7V8BnSILvy7NTsg";

try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    print_r($decoded);
} catch (Exception $e) {
    echo 'Token is invalid: ' . $e->getMessage();
}
?>

firebase/php-jwt 라이브러리를 사용하여 JWT를 검증합니다. $key 변수는 JWT의 비밀 키입니다. $jwt 변수는 검증할 JWT입니다. JWT::decode() 함수를 사용하여 JWT를 검증합니다. 검증에 실패하면 Exception이 발생합니다.

 

 

반응형

 

JWT 유효성 검사하기

JWT의 유효성을 검사하는 방법은 다음과 같습니다.

<?php
use Firebase\JWT\JWT;

$key = "secret_key";
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImpvaG5fZG9lIiwiZW1haWwiOiJqb2huX2RvZUBleGFtcGxlLmNvbSJ9.z2QzKvE5liYJ8e4zfCXH7Lx4J6Uz7V8BnSILvy7NTsg";

try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    $user_id = $decoded->user_id;
    $username = $decoded->username;
    $email = $decoded->email;

    // 유효기간 만료 체크
    $now = time();
    if ($decoded->exp <= $now) {
        echo 'Token is expired.';
    }

    // 유효한지 확인
    $isValidUser = true; // 유효성 검사 코드로 대체
    if (!$isValidUser) {
        echo 'Invalid user.';
    }

    // User 데이터 확인
    echo 'User ID: ' . $user_id . '<br />';
    echo 'Username: ' . $username . '<br />';
    echo 'Email: ' . $email . '<br />';
} catch (Exception $e) {
    echo 'Token is invalid: ' . $e->getMessage();
}
?>

위에서 생성된 JWT를 검증하고, 유효성을 검사합니다. 

먼저 JWT의 내용을 해독하여 $decoded 변수에 저장합니다. 그 후 $decoded 변수에서 user_id, username, email을 추출하여 사용합니다.

그 다음, JWT가 만료되었는지 검사합니다. JWT의 만료시간은 $decoded->exp 변수에 저장되어 있습니다. 현재 시간을 $now 변수에 저장하여 비교합니다. JWT가 만료되었으면 Token is expired. 메시지를 출력합니다.

마지막으로, 유효한 사용자인지 검사합니다. 이 검사는 실제로는 데이터베이스에서 사용자를 검색하고 검증하는 등의 작업이 필요합니다. 검증 결과에 따라 Invalid user. 메시지를 출력할 수 있습니다.

 

 

:: PHP에서 JWT를 사용하여 인증을 구현하는 방법과 예제를 알아보았습니다. JWT를 사용하면 토큰 기반 인증을 구현하여 보안성을 높일 수 있습니다. 

그리고 JWT 라이브러리를 사용하기 위해서는 PHP 5.6 버전 이상이 필요하며 firebase/php-jwt 라이브러리를 composer로 설치하면, 해당 라이브러리는 프로젝트 루트 디렉토리의 vendor 디렉토리 아래에 설치됩니다.

 


 

PHP 파일 업로드, 다운로드 예제

 

PHP 파일 업로드, 다운로드 예제

PHP를 이용한 파일 업로드와 다운로드 코드 예제입니다. Upload 아래는 업로드 예제입니다. // 파일 전송 form 위의 예제에서는 업로드된 파일을 임시 위치에서, 지정된 위치로 이동하는 move_uploaded_fi

summer-cat93.tistory.com

 

 

728x90
반응형
Comments