JWT에 대해 알아보자 ❗

2021. 1. 16. 20:11Server

JWT란 API 요청이 들어왔을 경우 사용 가능한 사용자인지 확인하는 절차(=인증) 방법으로써 JSON WEB TOKEN이다.

 

클라이언트와 서버 사이에서 JSON 객체를 사용하여 정보를 안전성 있게 전달할 수 있다.

 

👀 TOKEN 인증의 장점

 

  1. 보안성 - 더 이상 쿠키를 저장하지 않기 때문에 더 높은 보안성을 보장
  2. 무상태 & 확장성 - 세션을 이용할 경우 여러 대의 서버를 사용한다면 어떤 유저가 로그인했을 때 그 유저는 처음 로그인했던 서버에만 요청을 보낼 수 있어 서버를 여러 대 운영하는 장점이 사라진다.
  3. 확장성 - 페이스북/구글 같은 소셜 계정들을 이용하여 다른 웹서비스에서도 로그인이 가능하다.

OAuth : 페이스북으로 로그인하기처럼 다른 웹 서비스의 계정으로 사용자 인증을 대신하는 기술

 

👀 JWT 프로세스

 

클라이언트에서 JSON 객체 형식으로 id와 password를 보낸다. 그러면 서버에서 암호화하여 문자열로 된 JWT를 주고 다음부터 클라이언트는 HTTP HEADER에 JWT를 추가함으로써 사용자 인증을 요청한다. 서버는 JWT를 받아 다시 디코딩하여 클라이언트에서 요청한 사용자와 정보를 일치시킨다.

 

👀 JWT의 구조와 생성

JWT는 Header(헤더), Payload(내용), Verify Signature(서명)으로 구성되어있다.

 

1️⃣ Header - 토큰 정보

 

  • typ - 토큰의 타입을 명시
  • alg - 해싱 알고리즘을 명시

 

2️⃣ Payload - 전달할 정보

  • claim : name: value의 한 쌍을 의미 -> 따라서 하나의 토큰에 여러 개의 클레임을 넣을 수 있다.

 

✌ 클레임의 종류

  • 지정된 클레임(registerd Claim) - 토큰에 대한 정보들을 담기 위하여 클레임 이름이 이미 정해진 클레임
  • 공개 프레임(public Claim) - 클레임 이름으로 URL을 사용하여 URL이 중복되는 것을 피해 충돌을 방지해야 한다.
  • 비공개 프레임(private Claim) - 클라이언트와 서버 합의 하에 사용되는 클레임 이름들

 

3️⃣ Verify Signature - 토큰이 검증되었다는 사실을 증명

  • JWT형식으로 만들고 암호화하는 과정

 

 

👀 JWT Module

  • 토큰 생성 메소드 - jwt.sign(json data, secretKey, [options, callback])
  • 토큰 확인 메소드 - jwt.verify(token, secretKey, [options, callback])