2 분 소요

JWT Boot

Cookie를 활용한 인증

  • 클라이언트가 웹사이트에 접속할 때 사용하게 되는 기록 파일(client의 browser에 저장)
  • key, Value 형식의 문자열 형태로 저장
  1. 서버가 클라이언트에 정보를 전달할때 저장하고자 하는 정보를 응답 헤더(Cookie)에 저장하여 전달.
  2. 해당 클라이언트는 서버에 요청을 보낼 때마다, 매번 저장된 쿠키를 요청 헤더의 Cookie에 담아 전달.
  3. 서버는 쿠키의 정보를 이용하여 해당 요청의 클라이언트 식별이 가능
  • Cookie는 노출이 되기 때문에 id, password등 민감한 정보를 저장할 경우 보안에 좋지 않음

Session을 활용한 인증

Session

  • 민감한 정보를 노출 했을 때의 단점을 막기위해 나온 것
  • 클라이언트의 인증 정보를 Cookie가 아닌 서버 측에 저장하고 관리함

로그인 과정(with Session)

Session 단점

  • User의 Session에 대한 정보를 서버 메모리에 저장하는 부담
  • Cookie에 저장되는 Session ID의 경우 중요 정보가 없기 때문에 탈취 당해도 안전하지만, 그 Cookie를 사용하여 클라이언트인척 위장 할 수 있는 보안의 약점이 생김
  • 매번 요청 시 세선 저장소를 조회해야 함.

Token을 활용한 인증

Token

  • 클라이언트가 서버에 접속하여 사용자 인증을 했을 때 유일 값인 토큰을 발급
  • 서버에 요청을 보낼 때 요청의 헤더에 토큰을 넣어서 보냄
  • 클라이언트가 보낸 토큰이 서버에서 바급한 토큰과 같은지를 체크하여 인증처리
  • 토큰은 앱과 서버가 통신 및 인증할 때 많이 사용

서버(session)기반 VS 토큰(token) 기반인증


서버기반 토큰기반
서버에 사용자 인증 정보를 관리 클라이언트에 토큰 발급
클라이언트로부터 요청을 받으면 클라이언트의 상태를 계속 유지(Stateful) 로그인이 필요한 작업일 경우 헤더에 토큰을 삽입하여 보내고 인증(Stateless)
클라이언트가 많아지면 성능 문제 발생  

Token 단점

-토큰 자체의 데이터 길이가 길다.

JWT (JSON Web Token)

JWT

  • 인증에 필요한 정보를 암호화 시킨 JSON 토큰
  • JSON 데이터를 Base64 URL-safe-Encode를 통해 인코딩하여 직렬화
  • 토큰 내부에 위/변조 방지를 위한 개인키를 통한 전자서명 포함

JWT 구성

  • JWT에서 사용할 토큰의 타입과 암호화 알괼즘 정보로 구성
  • Key-Value 형태로 구성

payload

  • 서버로 보낼 사용자 권한 정보와 데이터로 구성(key-value 형태)
  • 토큰에 담을 클레임 정보 포함

Signature

Refresh Token

  • AccessToken을 탈취 당했을 경우에 대한 최소한의 대비(해결책 ❌)
  • AccessToken의 유효기간을 짧게 설정하여 탈취 되어도 사용기간을 줄이는 효과
  • RefreshToken을 통해 다시 AccessToken을 발급받아 사용
  • RefreshToken은 인증 정보를 담고 있지 않고 오로지 AccessToken 재발급 용도로만 사용함

AccessToken & Refresh Token 사용한 Login Process

  1. 클라이언트가 ID, PW서버에게 인증을 요청하고 서버는 이를 확인하여 Access TokenRefresh Token을 발급
  2. 클라이언트는 이를 받아 Refresh Token을 저장하고 Access Token을 가지고 서버에 자유롭게 요청
  3. 요청을 하던 도중 Access Token이 만료되어 더 이상 사용할 수 없다는 오류를 서버로부터 전달받음
  4. 클라이언트는 본인이 사용한 Access Token이 만료되었다는 사실을 인지하고 본인이 가지고 있던 Refresh Token을 서버로 전달하여 새로운 Access Token을 발급 요청
  5. 서버는 Refresh Token을 받아 서버의 Refresh Token Storage에 해당 토큰이 있는지 확인하고, 있다면 Access Token을 생성하려 전달
  6. 이후 2로 돌아가서 동일한 작업을 진행

JWT를 활용한 인증

image-20240905101903071

로그인 처리 준비

Front 준비(React PJT)

  • JWT Decoding을 위해 설치

    npm install jwt-decode

업데이트:

댓글남기기