[wecode TIL] JWT란?

hyuckhoon.ko·2020년 6월 18일
0

What I learned in wecode

목록 보기
56/109

1. JWT란 무엇인가?

access token을 생성하는 방법 중 하나가 JWT다.

  • JWT(JSON Web Token)

'토큰'이란 단어를 가상화폐 등에서 많이 들을 수도 있지만,
그보다 과거에 화폐 개념으로 사용했던 토큰 개념에 더 가깝다.



2. 토큰은 언제부여되는가?

유저가 웹에 접속을 한다.
로그인 창에 IDPW를 입력했을 것이다.
로그인 API를 통해 백엔드 서버에 해당 유저가 기 가입된 유저인지 확인절차를 거친다.

  • 1) DB에 유저 ID있는지 확인.(없다면 에러 메시지 리턴)
  • 2) 비밀번호 인증(유저 인풋값과 DB 저장값)
    - 필요개념 : bcrypt
  • 3) 웹 토큰 발행(JWT) 및 리턴
    - 필요개념 : jwt
      

3. 토큰은 왜 복잡한가?

  • JSON 데이터를 굳이 토큰화 시켜서 리턴하는 이유가 뭘까.

간단히, {user_id :6}처럼 보내면 될텐데 말이다.

1) 해킹 가능성에 대비해야 한다.
비밀번호 때와 같이 암호에 대한 개념이 들어 있지 않다. BASE64 인코딩으로 처리가 된 방식이기에 유출이 되었을때, 해독이 가능하다.
따라서, 토큰에는 유저아이디, 유저 비밀번호와 같이 중요한 데이터를 함께 보내면 안된다.

2) http 통신의 특징은 stateless다.
그렇다고 해서 클라이언트가 로그인을 했는지, 안했는지를
클라이언트에게 매번 물을 수가 없다.

유저가 댓글을 달거나 장바구니에 물품을 담거나 주문을 하는 등
특정 권한이 있는 클라이언트에게만 오픈해야만 한다.
따라서, 토큰을 통해 현재 사용자가 기 로그인한 유저인지 확인해야 한다.



4. JWT의 구조

xxxxx.yyyyy.zzzzz

1) header : x 부분
2) payload : y 부분
3) signature : z 부분

기본적으로 위와 같이 세 개의 구조로 구성돼 있다.

1) 헤더의 구조

  • 1) 토큰타입
  • 2) 해시 알고리즘
{
	'alg':'HS256',
    	'typ':'JWT'
}

토큰의 타입은 무엇이며, 사용된 알고리즘(HS256)이 있다.
실제로 서버 간 데이터가 전송될때, Base64URL 코드화되어서 보내진다.



2) payload의 구조

실제 데이터가 있는 부분이다.

{
    'user_id':'6,
    'exp' : 1539517391
}

헤더와 페이로드 부분은 Base64URL 방식으로 데이터가 오고간다.
즉, 절대 암호의 개념이 아니다. 따라서, 강조하지만 중요한 정보가
담겨서는 안된다.



3) signature

JWT의 마지막 부분이다.

이게 필요한 이유는 무엇일까.

'당신이 작성한 부동산 계약서가 원본인지 확인해 봅시다' 와 같은 맥락이다.
특징 중 하나는 signature 부분을 암호화되어 있다는 점이다.
하지만 복호화가 가능하다.

0개의 댓글