JWT

chrkb1569·2022년 7월 22일
0

Spring

목록 보기
2/11

지난 번에 CRUD를 구현한 토이 프로젝트를 마치면서, 추후에 쇼핑몰과 같은 다른 웹 페이지를 만들어보겠다고 한 적이 있습니다.
쇼핑몰 웹 페이지를 구축하기 위해서는 일단 사용자에 따라서 사용자의 등급, 소유하고 있는 금액을 다르게 해주어야 하기 때문에 사용자를 식별할 수 있는 수단이 필요하게됩니다.

쇼핑몰 홈페이지의 회원이 아닌 사용자에게는 상품 구매 페이지가 열리지 않도록 설정하며, 회원의 등급에 따른 할인 정책 및 접근할 수 있는 권한등을 제공하기 위해서는 회원을 식별할 수 있는 무언가가 필요하게 됩니다.

이처럼, 사용자를 식별할 수 있는 수단을 우리는 JWT라고 합니다.

JWT?

JWT란 Json Web Token의 약자로, 단어에서 의미를 유추할 수 있듯이 Json 데이터에 Web Token의 정보를 담은 것입니다.

간단하게 토큰이라고 부르는데, 이러한 토큰을 활용하여 사용자가 허가를 받은 사람인지, 아닌지를 판단하게 됩니다.

JWT의 구조

JWT는 3가지의 구성 요소로 이루어져있는데,

Header, Payload, Signature로 구성되어 있습니다.

"alg" -> signature에 들어가는 값을 생성하기 위한 부분입니다.
암호화 알고리즘 방식에서 평문을 암호화하기 위하여 key를 활용하는 것처럼, alg를 통하여 특정 알고리즘을 거친 뒤에 signature 값을 생성한다는 것 같습니다.

"typ" -> 토큰의 타입을 나타냅니다. 우리가 지금 보고 있는 토큰은 JWT이므로, JWT를 나타내고있습니다.

Payload

실질적으로 클라이언트와 서버가 주고 받는 데이터가 저장되어있는 부분입니다.

Signature

토큰의 유효성을 검사하기 위하여 문자열을 나타내는데, 이 문자열을 통하여 서버는 해당 토큰의 만료 유무와 사용자를 식별하는 기능을 수행합니다.

JWT의 장단점

JWT의 경우, 간단하다는 장점으로 인하여 Http 헤더, 파라미터, 쿠키 등에 첨부되어 활용될 수 있으며, 서버에 의존적이지 않다는 장점이 존재합니다.

하지만, 서버가 토큰을 관리하지 않는다는 장점이 단점으로도 작용합니다.
서버가 토큰을 관리하지 않기 때문에 토큰은 클라이언트가 관리하게 되는데, 서버가 토큰에 대하여 알고 있는 정보가 없습니다.
따라서, 만일 클라이언트가 토큰을 제3자에 의하여 분실할경우 서버는 분실한 토큰을 어찌할 방법이 없다는 단점이 존재합니다.
이러한 단점을 보완하기 위하여 JWT 토큰에 고의적으로 짧은 유효 기간을 지정하고 유효 기간이 지나가기전에 토큰을 refresh하는 방식을 활용한다고합니다.

그래서 우리가 관공서 홈페이지 같은 곳에 로그인하면

다음과 같은 로그인 세션을 유지하기 위한 타이머를 볼 수 있을 것입니다.

타이머가 모두 지나가기 전에는 로그인이 유지되지만, 유효 기간이 지나갈 경우, 자동으로 로그인이 해제되는 것을 볼 수 있습니다.

이와 같은 방식이 토큰을 활용하는 방식입니다.

오늘은 간단하게 JWT에 대해서 알아보았는데, JWT에 대해서 좀 더 공부한 뒤에, Spring Securiy를 활용하여 로그인 API를 만들어 볼 예정입니다.

0개의 댓글