brunch

You can make anything
by writing

C.S.Lewis

by 비즈스프링 Dec 28. 2023

JWT (Json Web Token)의 구조와 사용하기

이번 포스팅에서는 마이크로서비스 아키텍처(Microservices Architecture, MSA) 프로젝트를 진행하면서 사용한 JWT(Json Web Token)에 대해 소개하려고 합니다.


프로젝트를 진행하면서 스프링 시큐리티(Spring Security)를 걷어내고 JWT(Json Web Token) 방식으로 변경하였는데 가장 큰 차이점이라고 한다면 세션의 사용 유무입니다.


MSA 구조상 서버 확장시 세션을 공유하기가 어렵기 때문에 기존에 사용하던 세션을 이용한 로그인 처리를 하는 스프링 시큐리티(Spring Security) 대신 JWT(Json Web Token) 방식을 사용하게 되었습니다.


그럼, JWT(Json Web Token)이 무엇인지 어떻게 사용하고 확인하는지 알아보는 시간을 갖도록 하겠습니다.



1. JWT(Json Web Token) 이란

JWT는 유저를 인증하고 식별하기 위한 토큰(Token) 기반 인증입니다.

토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함됩니다.

RESTful과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고받을 수 있게 됩니다.

세션(Session)을 사용하게 될 경우 쿠키 등을 통해 사용자를 식별하고 서버에 세션을 저장했지만, 토큰을 클라이언트에 저장하고 요청시 HTTP 헤더에 토큰을 첨부하는 것만으로도 단순하게 데이터를 요청하고 응답받을 수 있습니다.




2. JWT(Json Web Token) 구조

JWT 구조 예시 (출처: BizSpring)

JWT는 세 파트로 나누어지며, 각 파트는 점으로 구분하여 표현됩니다.



(1) Header (헤더)

서명 시 사용하는 키(kid), 사용할 타입(typ), 서명 암호화 알고리즘(alg)의 정보가 담겨 있습니다.

JWT Header 예시 (출처: BizSpring)

kid : 서명 시 사용하는 키(Public/Private Key)를 식별하는 값

typ : 토큰 유형

alg : 서명 암호화 알고리즘 HS256(HMAC SHA-256), HS512, RS256(RSASSA SHA-256), ES256(ECDSA P-256 curve SHA-256)



(2) Payload (페이로드)

토큰에서 사용할 정보의 조각들인 클레임(Claim)이 담겨 있습니다.

클레임(Claim)은 Key/Value 형태로 된 값을 가집니다.

저장되는 정보에 따라 등록된 클레임(Registered Claims), 공개 클레임(Public Claims), 비공개 클레임(Private Cliams)로 구분됩니다.

JWT Payload 예시 (출처: BizSpring)

iss : 토큰 발급자(issuer) – Public Claims

sub : 토큰 제목(subject) – Public Claims

iat : 토큰 발급 시간(issued at) – Public Claims

exp : 토큰 만료 시간(expiration) – Public Claims

roles : 권한 – Private Cliams



(3) Signature (서명)

Header(헤더) 에서 정의한 알고리즘 방식(alg)을 활용합니다.

Header(헤더)+ 페이로드(Payload)와 서버가 갖고 있는 유일한 key 값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화합니다.

JWT Signature 예시 (출처: BizSpring)

Header(헤더) 와 페이로드(Payload)는 단순히 인코딩된 값이기 때문에 제 3자가 복호화 및 조작할 수 있지만, Signature(서명)는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 수 없습니다. 이는 토큰의 위변조 여부를 확인하는데 사용됩니다.




3. JWT(Json Web Token) 사용하기

(1) JJWT 라이브러리

JJWT 라이브러리 예시 (출처: BizSpring)

jjwt는 JWT 토큰 생성 및 파싱, 검증을 해주는 라이브러리 입니다.

jjwt-api, jjwt-impl, jjwt-jacson 를 모두 추가해 주어야합니다.



(2) JWT(Json Web Token) 생성

JWT 생성하기 예시 (출처: BizSpring)

토큰을 생성하여 반환합니다.



(3) JWT(Json Web Token) 검증

JWT 검증 예시 (출처: BizSpring)

parseClaimsJws 메서드는 서명된 JWS(Jason Web Signature)를 검증하고 클레임 셋을 반환합니다.



(4) JWT(Json Web Token) 클레임(Claim) 사용하기

JWT 클레임 사용 예시 (출처: BizSpring)

반환된 클레임으로 토큰에 저장된 sub, roles의 정보를 추출하여 사용합니다.




4. JWT(Json Web Token) 정보 확인하기

https://jwt.io/ 사이트를 통해 확인할 수 있습니다.

JWT 정보 확인 예시 (출처: BizSpring)




이상으로, BizSpring Growth Platform™️ 에서 JWT(Json Web Token) 구조와 사용하는 방법에 대해 알아보았습니다. 비즈스프링의 마케팅 자동화 솔루션 Growth Platform™️에 대해 궁금한 점은 아래 채널로 연락주시기 바랍니다.

감사합니다.



ad@bizspring.co.kr / 02-6919-5516




마케팅에서의 데이터 활용 기술과 인사이트
No.1 Data Partner for Data-Driven Growth
비즈스프링

공식 블로그 | 페이스북 | 네이버 블로그 | 유튜브 | 트위터 | 슬라이드쉐어


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari