Computer Science/Tech

[Tech] JWT(Json Wet Token)이란?

ooeunz 2019. 12. 16. 14:24
반응형

JWT

 

이전에는 세션 방식을 이용해서 로그인 기능을 구현했지만, 최근엔 JWT라는 토큰 기반의 인증 방식이 나오면서 웹과 모바일에서 대부분의 인증이 JWT로 구현되고 있다. JWT(Json Wet Token)는 클레임 토큰 기반 인증 방식으로 인증에 필요한 정보를 암호화시켜 토큰 body에 저장함으로써 클라이언트가 증명서처럼 사용한다.

 

 

세션과 비교 하였을 때 JWT

JWT는 세션과 비교하였을 때 무상태(stateless)와 확장성(scalability)의 이점이 있다. 토큰은 클라이언트에서 저장하기 때문에 서버측에서는 stateless하며, 요청이 왔을 때 서명이 옳바른지만 확인하면 되므로 비저장의 이점을 지닌다. 또한 msa와 같은 서버가 여러대로 분리되어 사용되고 있다면 어떤 유저가 로그인 햇을 때 그 유저가 처음 로그인했었던 서버에만 요청을 보내야 하기 때문에 확장성에 제약이 있지만 토큰방식을 사용한다면 어떤 서버로 요청이 오더라도 관계없이 인증할 수 있다. 또한 보안적으로도 기존의 세션 방식의 HTTP 요청을 해커가 가로챌 경우 그 안의 쿠키를 이용해 악용될 수 있는 보안적 약점을 보완했다.

 

 


JWT 구성요소

  • HEADER : JWT 토큰 유형과 해시 알고리즘이 들어있다..
  • PAYLOAD : 클라이언트에 대한 정보가 인코딩된 부분.
  • SIGNATURE : 토큰이 변조되었는지 여부를 확인할 수 있는 일련의 문자열로 header에서 지정한 알고리즘과 Payload를 secrey key로 담는다.

 

jwt.io에서 JWT Toekn을 아래 이미지와 같이 확인, 검증할 수 있다.

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

PAYLOAD는 공개 데이터이다.

위의 이미지와 같이 JWT의 정보는 누구나 jwt.io에 접속해서 확인할 수 있다. 따라서 비밀번호와 같이 보안이 필요한 정보는 payload에 저장하면 안 된다.

 

JWT의 Secrey Key

JWT에서는 정보는 공개되어 있지만 해시 값을 통해서 정보가 유효한지 확인하게 된다. 따라서 Secret Key가 유출되면 보안상의 위협이 된다.

 

 


JWT 인증 과정

토큰 발행(로그인)

  1. 클라이언트가 유저에 대한 정보(ID, Password)를 서버에 보낸다.
  2. 서버는 DB에서 유저 정보의 유효성을 확인한다.
  3. 유저 정보 중 일부를 JWT body에 넣고 토큰을 발행한다.
  4. 클라이언트에게 응답한다.


 

토큰 검증

  1. HTTP header에 토큰 값을 넣어서 보낸다.
  2. 서버는 토큰 값을 받아서 JWT 정보와 서버가 가지고 있는 secret key를 이용해서 서명을 만든다.
    이때, JWT의 서명과 일치하다면 유효한 토큰으로, 일치하지 않다면 유효하지 않은 요청으로 판단한다.

반응형