[TIL] JWT 방식의 정보 인증_항해99 Day 36

woonie·2022년 2월 14일
0

TIL

목록 보기
31/64
post-custom-banner

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 보낸 사용자의 관심상품 목록 조회

profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.
post-custom-banner

0개의 댓글