해당 예제는 CentOS 7 또는 8 에서 사용이 가능합니다.
관련 패키지와 환경 설정을 진행합니다.
1. Composer 설치
# yum -y update
# yum -y install php-cli php-zip wget unzip
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# HASH="$(wget -q -O - https://composer.github.io/installer.sig)"
# php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# php composer-setup.php --install-dir=/usr/local/bin --filename=composer
여기에서 아래와 같은 에러 메세지가 출력될 경우 패키지를 추가로 설치하고 진행하면 됩니다.
php 를 소스 컴파일 하신 경우 해당 옵션 (--disable-json) 을 제거하고 재컴파일 해야 합니다.
(에러)
Some settings on your machine make Composer unable to work properly.
Make sure that you fix the issues listed below and run this script again:
The json extension is missing.
Install it or recompile php without --disable-json
(해결)
# yum install php-json
composer 가 잘 설치되었는지 명령어로 확인해봅니다.
사용할 수 있는 옵션이 출력 될경우 정상 설치된 것입니다.
# composer
확인이 되었으면 설치 프로그램을 삭제 합니다.
# php -r "unlink('composer-setup.php');"
2. PHP-JWT 설치
composer require firebase/php-jwt
3. 테스트
# vi first.php
<?php require_once './vendor/autoload.php'; use Firebase\JWT\JWT; $secret_key = "this-is-the-secret";
// 데이터 입력 $id = "sysdocu"; $email = "sysdocu@sysdocu.tistory.com"; $addr = "seoul"; $phone = "010-1111-2222"; $data = array( 'id' => $id, 'email' => $email, 'addr' => $addr, 'phone' => $phone ); $jwt = JWT::encode($data, $secret_key); echo "encoded jwt: " . $jwt . "<br>"; //$decoded = JWT::decode($jwt, $secret_key, array('HS256')); //print_r($decoded); ?> |
생성한 php 파일을 웹브라우저로 불러오면 출력되는 결과는 아래와 같습니다.
encoded jwt 값을 자세히 보시면 hearder 와 payload 와 signature 값 모두 출력되는 것을 볼 수 있습니다. (점으로 구분)
encoded jwt: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6InN5c2RvY3UiLCJlbWFpbCI6InN5c2RvY3VAc3lzZG9jdS50aXN0b3J5LmNvbSIsImFkZHIiOiJzZW91bCIsInBob25lIjoiMDEwLTExMTEtMjIyMiJ9.xmYK1C0pnguCpC8qFUaJYYoLNnhkQ6kGiBxba_aM1gc |
내용을 받을 php 를 만듭니다.
# vi second.php
<?php require_once './vendor/autoload.php'; use Firebase\JWT\JWT; $secret_key = "this-is-the-secret";
// URL 에서 jwt 인자값을 가져온다. $jwt = isset($_GET['jwt']) ? $_GET['jwt'] : null; if (isset($jwt)) {
// validate jwt 로그인된 상태 try { $decoded = JWT::decode($jwt, $secret_key, array('HS256')); $decoded_array = (array)$decoded; $result = array( 'code' => 200, 'status' => 'success', 'jwt_payload' => $decoded_array ); } catch (\Exception $e) { $result = array( 'code' => 0, 'status' => 'error', 'message' => $e->getMessage().' Invalid JWT - Authentication failed!' ); }
} else { $result = array( 'code' => 0, 'status' => 'error', 'message' => 'JWT parameter missing!' ); } echo json_encode($result); ?> |
그리고 브라우저에서 first.php 의 결과 코드를 활용해 second.php 로 접속해 봅니다.
http://{도메인}/second.php?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6InN5c2RvY3UiLCJlbWFpbCI6InN5c2RvY3VAc3lzZG9jdS50aXN0b3J5LmNvbSIsImFkZHIiOiJzZW91bCIsInBob25lIjoiMDEwLTExMTEtMjIyMiJ9.xmYK1C0pnguCpC8qFUaJYYoLNnhkQ6kGiBxba_aM1gc
[결과]
{"code":200,"status":"success","jwt_payload":{"id":"sysdocu","email":"sysdocu@sysdocu.tistory.com","addr":"seoul","phone":"010-1111-2222"}}
데이터가 잘 확인되었습니다.
필요에 따라 이 샘플 코드를 이용해 세션 파일을 만드는 등 추가 작업을 진행하면 됩니다.
상세 설명은 아래 URL 에서 확인 가능합니다.
[출처1 - 환경 설치 부분] https://phoenixnap.com/kb/how-to-install-and-use-php-composer-on-centos-7
[출처2 - 테스트 부분] https://trytoso.tistory.com/1024
https://heartgamer.wordpress.com/2015/08/26/json-web-tokenjwt%EB%A5%BC-node-js%EC%99%80-php%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/