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

shell>composer require firebase/php-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 검증하기
<?php

use Firebase\JWT\JWT;

$key = "secret_key";
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
        .eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImpvaG5fZG9
        lIiwiZW1haWwiOiJqb2huX2RvZUBleGFtcGxlLmNvbSJ9
        .z2QzKvE5liYJ8e4zfCXH7Lx4J6Uz7V8BnSILvy7NTsg";

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

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

?>

 

  • JWT 유효성 검사하기
<?php

use Firebase\JWT\JWT;

$key = "secret_key";
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
        .eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImpvaG5fZG9
        lIiwiZW1haWwiOiJqb2huX2RvZUBleGFtcGxlLmNvbSJ9
        .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. 메시지를 출력할 수 있습니다.


?>