JWT : Code

DATE : 2023/11/12

JWT : JSON Web Token에서 살펴본 내용을 정리해보면

  • header : token에 대한 metadata

  • payload : 사용자에 관한 data (= claims)

  • signature : 중간에 값이 조작 되었는지 검증하기 위한 값

  • secret key : signature를 만드는 재료 중 하나로, 이 값을 모르는 이상 signature까지 조작할 수 없다!

크게 중요한 4가지의 개념은 위와 같이 나열해볼 수 있을 거 같다.

이번 POST에서는 JWT를 구현하기 위한 코드를 살펴볼까 한다. 그럼 바로 들어 가보자 👍


[ jwt.php ]

<?php
    require __DIR__.'/../../vendor/autoload.php';
    use Firebase\JWT\JWT;
    use Firebase\JWT\Key;


    $key = 'codenamehan10hxx19'; //secret key
    $payload = [
        "exp" => time() + 15*60,
        "iat" => time(),
        "user" => "hanhxx",
        "name" => "han10hxx19"
    ];

    $jwt = JWT::encode($payload, $key, 'HS256');
    echo $jwt."<br>";
    
    $split_token = explode('.', $jwt);
    foreach($split_token as $value) {
        echo $value."   =>   ".base64_decode($value)."<br>";
    }


    $decoded = JWT::decode($jwt, new Key($key, 'HS256'));
    var_dump($decoded);
?>

Firebase\JWT\JWT를 사용하면 encode & decode 등

jwt를 다루는 과정에서 필요한 기능을 손쉽게 활용할 수 있다.

사용할 secret key와 payload를 작성한 다음, JWT의 encode 함수를 이용해 토큰을 생성한다.

encode 함수에 payload, secret key, hash function algorithm을 넣어 실행하면

header는 따로 작성하지 않더라도

아래와 같이 기본적으로 header가 포함된다.

encode 함수 결과를 출력해보면

jwt.io에서 봤던 값과 유사한 형태의 토큰을 얻을 수 있다.

토큰이 어떻게 생겼나 궁금하니 dot을 기준으로 각 파트의 값을 출력해보자..!

토큰 값과 base64 decode를 실행한 값을 같이 출력해보면

dot으로 구분된 내용이 각각 header, payload, signature 값으로 구성되어 있음을 확인할 수 있다.

생성했던 토큰을 반대로 decode함수에 넣어보면

기본적으로 payload 부분만 반환 된다.

이처럼 library를 사용하면 손쉽게 JWT를 만들어볼 수 있다!

그렇다면 다음으로.. JWT를 이용한 로그인 구현을 도전해보자..! 😎

Last updated