ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3-5, 3-6 JWT
    스파르타 강의 정리 2023. 11. 7. 20:46

     

     

     

    JWT (Json Web Token)란 

    JSON 포맷을 이용하여 사용자 관련 속성을 저장하는  Claim 기반 Web Token.

    일반적으로 쿠키저장소를 사용하여 저장.

     

     

     

    서버가 한대면 모든 클라이언트의 로그인 정보를

    가지고 있기 때문에 문제가 발생하지 않는다

     

     

     

     

    서버가 2대 이상이면 클라이언트와 서버사이에

    로드밸런서가 개입하게 되는데 

    클라이언트의 요청을 원하는 서버로 보내지 않는데

    미리 대처해두지 않으면 여기서 문제가 발생한다.

     

     

     

    각 서버의 세션마다 가지고 있는 클라이언트 로그인 정보가 다를 수 있다.

    (세션1은 클라이언트1~10,  세션2는 클라이언트 11~20 등)

    그래서 클라이언트1의 요청이 서버2 서버3으로 보내지게 된다면  문제가 발생한다.

     

     

    해결방법은 두가지가 있다.
    1. Sticky Session : 클라이언트마다 요청서버를 고정한다.
    2. 세션저장소를 생성하여 모든 세션을 저장 -> 모든 서버에서 모든 클라이언트의 요청을 처리할 수 있음

     

     

    세션저장소 방식

     

    JWT

     

    로그인 정보를 서버에 저장하지않고 클라이언트에 JWT로 암호화하여 저장 -> JWT를 통해 인증/인가

    모든 서버에서 동일한 Secret key를 소유한다.

    시크릿 키를 통한 암호화, 위조 검증(복호화 시)

     

     

    JWT의 장단점

    장점 - 동시접속자가 많을때 서버 부하 낮춤
       -> 외부의 다른 스토리지와 연결해서 체크를 하는것이 아니라 특정값만 서버에 있으면 바로 처리되기 때문

    - 클라이언트와 서버가 다른 도메인을 사용할때
      ex. 카카오 OAuth2  로그인시 jwt 토큰 사용

    단점 - 구현의 복잡도 증가
    - Jwt에 담는 내용이 커질수록 네트워크 비용 증가
    - 이미 생성된 jwt를 일부만 만료시킬 방법이 없음
    - 시크릿키 유출 시 조작 가능

     

     

     

    JWT는 오픈되어있기때문에 알고리즘을 통해 볼 수 있음.  그래서 비밀번호 같은건 넣으면 안된다
    그렇지만 시크릿 키가 없으면 수정이 불가능함 -> JWT는 Read Only 데이터다.

     

     

     

     

     


     

    Util 클래스란? 특정한 매개변수 혹은 파라미터에 대한 작업을 수행하는 메소드들이 존재하는 클래스
    다른말로 다른객체에 의존하지 않고 하나의 모듈로서 동작하는 클래스라고 할 수 있다.

     

     

    JWT를 반환하는 방법 두가지

    1. 쿠키객체를 만들어서 쿠키 객체에 담아서 리스폰스객체에 담기
    장점 
    - 쿠키 자체에 만료기한을 줄 수 있거나 다른 옵션도 추가가능
    - 헤더에 셋-쿠키라고 이름이 넘어가면서 자동으로 쿠키가 저장됨

     

    2. JWT토큰을 그냥 리스폰스헤더에 달아서 내보내기
    장점
    - 코드수 간소화

    둘 중 상황에 맞는 방법을 사용하면 됨

     

     

     

    logging 이란?
    애플리케이션이 동작하는 동안에 프로젝트의 상태나 동작정보를 시간순으로 기록하는 것

     

     

    JWT 시크릿 키를 관리하는 방법이 여러가지가 있다.
    구글링해서 찾아볼때 JWT 라이브러리 버전을 꼭 확인하자.  현재는 0.11.5

     

     

Designed by Tistory.