JWT

JUNHO YEOM·2022년 7월 31일
0

Backend

목록 보기
1/1

JWT(Json Web Token)

인증 방식의 종류증 하나이다.
로그인 상태를 유지(인가)할 때 사용된다.


먼저 인증에 대해서 알아보자

로그인 했을 때 우리는 웹페이지의 기능을 사용할 수 있다.
인증이 되었다는 것은 이용권과 같아서 우리가 인증을 받은 기간동안 웹페이지의 기능들을 사용할 수 있다.
인증의 방식에는 흔히 세션 방식과 JWT방식이 있다.

세션 방식

인증 상태를 유지하기 위한 정보를 서버에서 유지하는 하나의 방식
인증을 위한 세션ID를 사용자의 브라우저에 쿠키 저장하고
세션 아이디를 서버의 DB, memory에 있는 정보와 확인해서 인증을 유지한다.
로그인된 상태를 유지하기 위해서 사용자의 상태를 기억하고 있어야 한다.

JWT

Json web Token을 발행해서 인증을 유지하는 방식
로그인된 상태를 유지하기 위해서 사용자의 상태를 기억하고 있을 필요가 없다


JWT의 구조

JWT는 다음과 같이 3개의 부분으로 나뉜다.
XXXXX.YYYYYYYY.ZZZZ
(헤더).(페이로드).(서명)

마침표를 기준으로 3개 부분으로 나뉘어 있는 것을 알 수 있다.(https://jwt.io/)

헤더

{
 "alg": "HS256",
 "typ": "JWT"
}

alg: 서명값을 만드는데 사용될 암호화 알고리즘의 종류
typ: JWT(고정값)


페이로드

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

누가 누구에게 발급했는지
유효기간
기타 서비스제공 측에서 전달하고자 하는 정보등이 들어있다.


서명

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),  
<server Secret Value>
) 

헤더와 페이로드, 서버에서 지정한 값을 암호화 알고리즘을 사용해서 만들어낸 값
여기에는 서비스 제공자 측의 비밀값이 추가되어 암호화 되기 때문에
JWT안의 내용을 볼 수는 있어도 수정하지 못하게 하는 역할을 한다.


장점

세션과 달리 사용자의 상태를 저장해 놓을 필요가 없다.
서버에 직접 저장하지 않기 때문에 서버에 부담이 없다.
세션은 서버가 꺼지면 인증 정보들이 사라지지만, 토큰은 정보가 사용자 측에 있어서 영향이 없다.

단점

일정시간 사용 가능한 토큰을 사용자측에 주기 때문에 서버가 원할 때 사용자의 상태를 제어할 수가 없다.
토큰 시간을 길게 발행하게 되면 보안에 문제가 생길 수 있다.
(토큰을 사용자 이외의 사람이 탈취하게 되면 유요한 시간 만큼 사용자가 아닌 사람이 권한을 사용할 수 있다.)


참고


단어

인증(Authentication): 사용자가 로그인을 할때 권한을 가진 회원인것을 확인하는것

인가(Authorization): 인증 받은 사용자가 서비스를 사용할 때 필요한 자격을 확인하고 허가하는것

0개의 댓글