DevBoi

[Spring] JWT란? 본문

Develop/[Spring]

[Spring] JWT란?

HiSmith 2022. 3. 28. 17:34
반응형

JWT(JSON web Token)이란?

 

Json 포맷을 이용하여, 사용자에 대한 속성을 저장하는 Claim기반의 Web Token이다.

JWT는 토큰 자체를 정보로 사용하는 Self Contained 방식으로 정보를 안전하게 전달 한다.

주로, 회원 인증이나 정보 전달에 사용되는 JWT는 아래의 로직으로 구현된다.

 

Header, Payload, Signature 3개의 부분으로 구성되어있어, 쿠키나 세션을 이용한 인증보다 안전하고 효율적이다.

일반적으로 Request Header에 담겨져 오기 때문에, Header값을 확인하여 가져올 수 있다.

 

장점 

-중앙 인증 서버, 저장소에 대한 의존성이 없어서 수평 확장에 유리

-Base64 URL Safe Encoding이라 URL,Cookie, Header 어떤 형태로도 사용 가능

-Stateless한 서버 구현가능

-웹/모바일 가능

-인증정보를 다른 곳에서도 사용가능

 

단점

-Payload의 정보가 많아지면 네트워크 사용량 증가

-다른사람이 토큰을 디코드하여 확인가능

-토큰 탈취당한 경우 대처하기 어렵다

-토큰 유효기간이 만료전까지 탈취자가 마음대로 인증가능

-refresh token 형태로 발급방식을 쓴다.

 

 

Base64로 인코딩 되어 표현되고, 각각의 부분을 이어주기 위해, 구분자를 사용하여 구분한다.

 

 

1. Header 

typ와 alg 로 구현, 시그니처를 해싱하기 위한 알고리즘이 alg, typ : 타입

 

 

2.페이로드

토큰의 페이로드에는 토큰에서 사용할 정보의 조각들인 클레임이 담겨있다.

클레임은 총 3가지로 나뉘고, Json 형태로 다수의 정보를 넣을 수 있다. (등록된 클레임,공개 클레임,비공개 클레임)

 

3.서명 

서명은 토큰을 인코딩하거나, 유효성 검증을 할때 사용하는 고유한 암호화 코드이다.

서명은 위에서 만든 헤더와 페이로드의 값을 각각 Base64로 인코딩하고, 인코딩한 값을 비밀키를 이용해 헤더가 정의한 알고리즘으로 해싱한다.

반응형