본문 바로가기

Spring

JWT 방식의 정보 인증

728x90

JWT

jwt란

  • 서버가 1대인 경우 모든 클라이언트의 로그인 정보를 소유한다.

  • 서버가 2대 이상인 경우 서버의 대용량 트래픽 처리를 위해 서버 2대 이상 운영이 필요하다.

  • 서버마다 다른 클라이언트 로그인 정보를 가지고 있을 수 있다.

    • 서버1 : 클라이언트1, 클라이언트2, 클라이언트3
    • 서버2 : 클라이언트4
    • 서버3 : 클라이언트5, 클라이언트6
  • 클라이언트1 로그인 정보를 가지고 있지 않은 서버2나 서버3에 API요청을 하게되면 클라이언트마다 요청 서버를 고정하면 된다.

JWT 사용

  • 로그인 정보를 서버에 저장하지 않고 클라이언트에 로그인 정보를 JWT로 암호화 하여 저장한다.
  • 모든 서버에서 동일한 Secret Key를 보유
  • Secret Key를 통한 암호화 / 위조 검정

JWT 장/단점

  1. 장점

    • 동시 접속자가 많을 시 서버 측 부하 낮춤
    • 클라이언트, 서버가 다른 도메인을 사용할때
  2. 단점

    • 구현의 복잡도 증가
    • JWT에 담는 내용이 커질 수록 네트워크 비용 증가
    • 기생성된 JWT를 일부만 만료시킬 방법 없음
    • Secret key 유출 시 JWT조작 가능

JWT 사용 흐름

  • JWT 사용 흐름 Overview

    1. Client 가 username, password 로 로그인 성공 시

      1. "로그인 정보" → JWT 로 암호화 (Secret Key 사용)

      2. JWT 를 Client 응답에 전달

      3. Client 에서 JWT 저장 (쿠키, Local storage 등)

    2. Client 에서 JWT 통해 인증방법

      1. JWT 를 API 요청 시마다 Header 에 포함

        예) HTTP Headers

         Content-Type: application/json
         **Authorization: Bearer** **<JWT>
         ...**
      2. Server

        1. Client 가 전달한 JWT 위조 여부 검증 (Secret Key 사용)

        2. JWT 유효기간이 지나지 않았는지 검증

        3. 검증 성공시,

          1. JWT → "로그인 정보" (UserDetailsImpl) 만들어 사용

            ex) GET /api/products : JWT 보낸 사용자의 관심상품 목록 조회

'Spring' 카테고리의 다른 글

[TIL] 항해99 Day 38  (0) 2024.04.15
JWT 방식의 정보 인증(2)  (1) 2024.04.12
[TIL] CORS에러! 무엇인가?  (1) 2024.04.12
MVC 테스트  (1) 2024.04.12
RESTful하다?  (0) 2024.04.12