메뉴 건너뛰기

자료실

DATA

php로 Json Web Token 구현하기

소프터 2021.08.05 19:46 조회 수 : 17

안녕하세요 컨텐츠 서비스팀 김동형입니다

 

간단하게 Json Web Token(JWT)을 구현했습니다

 

처음 공부할 때 인터넷에 검색하면 OAuth, RESTAPI 등이

같이 소개 되어있어서 헷갈리지만 JWT 자체는 간단합니다

 

JWT는 데이터 무결성을 위해 사용하는 모든 곳에 사용 가능합니다

 

어떤 정보를 전달하는지 알아내는 것은 쉽지만 

크래커가 토큰을 탈취해서 잘못된 데이터를 전달하려면

JWT의 signature 부분을 알아내서 header, payload 와 같이 정보를 바꿔야 하는데

대상의 서버가 signature를 어떻게 만들었는지 해석해내야 합니다

 

그러므로 데이터 변조에 강력한 것으로 생각됩니다

class jwt
{
        protected $alg;
        function __construct()
        {
               //사용할 알고리즘
               $this->alg = ‘sha256’;
        }

        function hashing(array $data)
        {
               // 토큰의 헤더
               $header = json_encode(array(
                      ‘alg’=>$this->alg,
                      ‘typ’=>’JWT’
               ));

               // 전달할 데이터
               $payload = json_encode($data);

               // 시그니처 토큰 확인에서 제일 중요
               // 충분히 복잡하게 구현해야함
               $signature = hash($this->alg, $header.$payload);

               return base64_encode($header.’.’.$payload.’.’.$signature);
        }

        function dehashing($token)
        {
               // 토큰 만들때의 구분자 . 으로 나누기
               $parted = explode(‘.’, base64_decode($token));

               $signature = $parted[2];

               // 위에서 토큰 만들때와 같은 방식으로 시그니처 만들고 비교
               if(hash($this->alg, $parted[0].$parted[1]) == $signature)
                      echo “\n\ngood\n\n”;
               else
                      exit(‘잘못된 signature 입니다’);

               /*

                      만료 확인 등 값 검사

               */

               $payload = json_decode($parted[1],true);
               return $payload;
        }
}

$jwt = new jwt();

$token = $jwt->hashing(array(
        ‘sub’=>’1234567890’,
        ‘name’=>’smileserv’,
        ‘iat’=>time()
));
var_dump($token);

/*

토큰 값

string(200) “eyJhbGciOiJzaGEyNTYiLCJ0eXAiOiJKV1QifS57InN1YiI6IjEyMzQ1Njc4OTAiLCJuY

W1lIjoic21pbGVzZXJ2IiwiaWF0IjoxNTY5Mzk0MTY1fS4xNGQ4N2U4NGJhMzE2YjBh

YWMwYzNhMjRmZmRiYTE3NjIyNzlhM2UzZTViNjkzMDI0NzA3ODY2MDdjYTY5N

TEw”

*/

/*
데이터 이동 …
*/

$data = $jwt->dehashing($token);
var_dump($data);

/*

토큰 해석 후 데이터

array(3) {
        [“sub”]=>string(10) “1234567890”
        [“name”]=>string(9) “smileserv”
        [“iat”]=>int(1569394165)
}

*/

번호 제목 글쓴이 날짜 조회 수
67 영카트 디자인스킨변경 file 소프터 2021.10.19 4
» php로 Json Web Token 구현하기 소프터 2021.08.05 17
65 권한설정 빡센 페이지에서 curl 안될때 소프터 2021.08.04 4
64 [php] php.ini short_open_tag 변경안될때 해결 방법 출처: https://solbel.tistory.com/1486 [개발자의 끄적끄적] 소프터 2021.08.04 2
63 ios - 이미지에서 알파 채널 제거 소프터 2021.06.25 49
62 2021 6월 웹뷰 기본세팅 소프터 2021.06.08 8
61 mysql 프로시저 정리 소프터 2021.05.24 16
60 mac 이미지에 알파채널제거 소프터 2021.05.07 60
59 aws 컴포저 설치방법 소프터 2021.04.27 17
58 우분투 18.04 도커(Docker) 설치 방법 소프터 2021.04.08 23
57 리눅스 디렉토리 용량 확인 du 소프터 2021.03.08 73
56 아마존 웹서비스 (AWS) 대략적 이용 가격 소프터 2021.02.26 87
55 onShouldStartLoadWithRequest 웹뷰 예외처리 소프터 2021.02.24 91
54 ios 스플래시 중앙정렬 file 소프터 2021.02.23 18
53 그누보드 및 php 에서 브라우저 이미지 캐싱처리 이슈 소프터 2021.02.22 27
52 s3 스토리지 셋팅 소프터 2021.02.09 39
51 셀렉트 박스에 이미지를 넣고싶을때 [1] file 소프터 2021.02.02 31
50 리액트 안드로이드 배포 2021 01.13 키스토어 파일을 보관을 생활화 합시다 소프터 2021.01.13 91
49 우분투 라라벨 설치 소프터 2021.01.04 117
48 우분투 18.04 도커(Docker) 설치 방법 소프터 2021.01.04 30