JWT 토큰

Seonhee Kim·2023년 4월 26일

study

목록 보기
5/18

📌 HTTP 프로토콜

서버와 클라이언트가 데이터를 주고 받는 통신 방법

비연결성

connectionless 연결을 유지하지 않는다.
서버와 클라이언트가 한 번 통신이 일어나고 나면 그 연결이 유지되지 않고 바로 끊어진다.

무상태성

stateless 상태를 유지하지 않는다.
서버와 클라이언트가 첫번째 통신을 끝내고 두번째 통신을 할때, 이전의 통신에 대한 정보를 가지고 있지 않기 때문에 새롭게 갱신을 해주어야 한다.

-> 이러한 http의 특성들 때문에 프론트에서 "로그인"을 구현하는데 어려움이 있음. 사용자가 서버에 요청을 보낼때마다 자신이 누구인지 매번 인증을 해주어야 하기 때문에
-> 번거롭고 웹페이지가 느려지는 원인이 된다.
-> 사용자가 누구인지 계속해서 인증을 하는 방법 대신 로그인 정보를 유지시킬 다른 방법이 필요했다.
-> 사용자의 로그인 정보를 어디에 유지, 저장을 하느냐에 따라 두 방식으로 나눠짐

📌 세션 (서버유지)

서버의 메모리, DB 같은 서버의 자원들을 사용해서 사용자의 정보를 유지시키는 방식

장점 ) 토큰 방식보다 보안에 강하다.
단점 )
서버의 확장성이 떨어짐.
서버의 자원이(세션을 저장하고 유지할 공간) 많이 필요함.
여러대의 서버를 사용할때, 사용자가 로그인을 했을때 만들어진 세션을 참조해야하기때문에 처음 로그인한 그 서버에만 요청을 보내야 한다.

📌 토큰방식 (클라이언트 유지)

사용자 로그인 - 서버에서 토큰(JWT) 발행 - 브라우저 저장소에 토큰을 유지시킴
서버에 저장하지 않아서 서버에 확장성이 있다.
요청이 들어왔을 때 해당 토큰이 유효한지만 체크하면 된다. = 어떤 서버로 요청을 보내도 상관이 없다. (<> 세션방식은 로그인한 해당 서버에만 요청을 보내야한다.)

📌 JWT

JSON Web Token 의 약자

암호화, 복호화를 통해 두 개체 사이에서 안정성있게 정보를 교환하기 좋은 방법

JWT를 어떻게 검증하는지에 대한 내용이 들어있다.
토큰의 타입, 암호화 알고리즘이 어떤 알고리즘인지에 대한 정보가 들어있음.

payload

보내고자 하는 데이터가 이곳에 담겨짐
이 정보의 조각은 claim이라고 하고, key-value의 한 쌍으로 이루어져 있다.
payload에는 여러개의 클레임을 담을 수 있고, 공개 비공개 등록 여부를 결정할 수 있다.

signature

헤더와 페이로드를 합친 문자열을 서명한 값. secret을 포함해 암호화 되어있다.

📌 JWT의 장단점

장점

  1. 세션과 달리 별도의 인증 저장소가 필요 없어서 서버와의 커뮤니케이션을 최소한으로 할 수 있다.
  2. 트래픽에 대한 부담이 적다
  3. 세션과 다르게 독립적인 느낌의 JWT를 활용한다는 것

단점

  1. 토큰이 클라이언트에 저장되기때문에 DB에서 사용자 정보를 수정하더라도 토큰에 직접 적용할 수 없다.
  2. JWT의 크기가 커질수록 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있다.

📌 JWT 프로세스


  1. 사용자가 id pw 입력하고 서버로 로그인 요청
  2. 서버는 비밀 키를 통해 서명하고, 공개키로 암호화시킨 access token을 발급한다.
  3. access token을 사용자(클라이언트)에게 보낸다.

*** 여기까지하면 사용자는 로그인 완료

  1. 로그인 정보가 필요한 API 호출마다 토큰을 실어 보낸다. (Authorization Header에 Access Token 담아서)
  2. 서버에서는 사용자가 보낸 토큰을 공개 키로 서명 체크하고, 안에 담긴 정보 확인 (서버는 secret key로 사용자가 보낸 토큰의 서명을 복호화하여 유효한 토큰인지 확인)
  3. 서버가 요청에 대한 응담을 사용자에게 (클라이언트)에게 전달한다.

Refresh Token

Access Token 만을 사용했을때 보안문베를 해결하기 위한 나온것이 Refresh Token

유효기간이 긴 토큰은 그 시간동안 정보를 탈취당하게 됨
유효기간을 줄이자니 사용자가 로그인을 여러번해야해서 번거로움
-> 그래서 나온 게 Refresh Token

Refresh Token 도 JWT. 로그인했을때 서버에서 유효기간을 다르게 해서 Access / Refresh 를 동시에 보내준다.
Access의 기간이 만료되어도 로그인 없이 Refresh(유효기간이 더 긺)로 다시 Access Token 발급

profile
안녕하세요 ~_~

0개의 댓글