[php] JSON Web Token(JWT)을 PHP에서 생성하고 검증하는 방법

웹 애플리케이션에서 사용자를 인증하고 권한을 부여하는 데 흔히 사용되는 방법 중 하나는 JSON Web Token(JWT)입니다. JWT는 사용자의 클레임 정보를 안전하게 전달하기 위한 표준 방법 중 하나로, 사용자의 정보가 타사에서 발급한 토큰에 안전하게 포함될 수 있도록 해 줍니다. 이것을 이용하면 세션이나 쿠키와 같은 전통적인 방식보다 더 유연하게 사용자 권한을 관리하고 전달할 수 있습니다.

이 튜토리얼에서는 PHP에서 JWT를 생성하고 검증하는 과정을 살펴보겠습니다.

JWT 생성하기

먼저, PHP에서 JWT를 생성하기 위해서는 firebase/php-jwt 라이브러리를 설치해야 합니다. Composer를 이용하여 다음 명령어를 사용하여 라이브러리를 설치합니다.

composer require firebase/php-jwt

이제 JWT를 생성하는 PHP 코드를 작성해보겠습니다.

<?php
require_once('vendor/autoload.php');
use \Firebase\JWT\JWT;

$key = "your_secret_key";
$payload = array(
    "user_id" => 123,
    "username" => "example_user"
);

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

위 코드에서 key 변수에는 시크릿 키를 지정하고, payload 변수에는 클레임 정보를 포함시킵니다. JWT::encode 함수를 사용하여 페이로드 정보를 기반으로 JWT를 생성합니다.

JWT 검증하기

JWT를 검증하기 위해서는 클라이언트로부터 받은 JWT와 시크릿 키를 사용하여 유효성을 확인해야 합니다.

<?php
require_once('vendor/autoload.php');
use \Firebase\JWT\JWT;

$jwt = "your_jwt_from_client";
$key = "your_secret_key";

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

위 코드에서 JWT::decode 함수를 사용하여 JWT를 검증하고, 만약 유효하다면 디코딩된 페이로드를 반환합니다. 그렇지 않을 경우에는 예외처리하여 에러 메시지를 출력합니다.

이제 PHP에서 JWT를 생성하고 검증하는 방법에 대해 알아보았습니다. JWT를 사용하면 더욱 안전하고 유연한 웹 애플리케이션을 구축할 수 있습니다.

더 자세한 내용은 firebase/php-jwt를 참고하세요.