• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • JWT 정리
        2023년 01월 29일
        • starryeye
        • 작성자
        • 2023.01.29.:35
        반응형

        JWT란?

        RFC 7519 웹 표준으로 지정 되어 있고,

        Json 을 사용해서 토큰 자체에 정보들을 저장 하고 있는 Web Token이라고 정의 된다.

         

        RFC 7519

        https://www.rfc-editor.org/rfc/rfc7519

         

        RFC 7519: JSON Web Token (JWT)

         

        www.rfc-editor.org

         

        JWT 공식 사이트

        https://jwt.io/

         

        JWT.IO

        JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

        jwt.io

         

         

        JWT (Json Web Token)의 구성

        Header, Payload, Signature 로 .을 구분자로 나누어지는 3개의 부분으로 구성되어 있다.

        (색깔 별로 구분해서 보자)

        Header : Signature를 해싱하기 위한 알고리즘 정보가 담긴다.

        -> 위 예시에서는 HS256 알고리즘

        alg : 정보를 암호화할 해싱 알고리즘

        typ : 토큰의 타입

         

        Payload : 서버와 클라이언트가 주고 받는, 시스템에서 실제로 사용될 정보에 대한 내용들이 담긴다.

        주로 클라이언트의 고유 ID, 유효 기간 등이 포함

        참고로 key-value 형식으로 이루어진 한쌍의 정보를 Claim 이라고 말한다.

         

        Signature : 토큰의 유효성 검증을 위한 문자열이다.

        -> 해당 문자열을 통해 서버에서 해당 토큰이 유효한 토큰인지 위변조를 검증한다.

         

        Signature는 인코딩된 Header와 Payload를 더한 뒤 비밀키로 해싱하여 생성.

        Header와 Payload는 단순히 인코딩 된 값이기 때문에 제 3자가 복호화 및 조작 할 수 있지만..

        Signature는 서버 측에서 관리하는 비밀키로 복호화 할 수 있다.

         

         

         

        JWT의 장점

        1. JWT는 토큰에 대한 기본 정보와 전달할 정보 등 필요한 모든 정보를 자체적으로 가지고 있다.

        -> 중앙의 인증 서버, 데이터 스토어에 대한 의존성이 없다.

        -> 시스템 수평 확장에 용이하다. (Stateless)

        2. Base64 URL Safe Encoding을 사용한다.

        -> URL, Header, Cookie 모두 사용 가능하다.

        3. 토큰 기반으로 동작하여, 다른 로그인 시스템에 접근 및 권한 공유가 가능하다.

         

        JWT의 단점

        1. Payload의 정보가 많아지면 트래픽이 증가한다.

        -> 데이터 설계를 잘 해야함.

        2. 토큰이 클라이언트에 저장되기 때문에, 서버에서 클라이언트의 토큰을 조작 불가능

        3. 토큰 내부에 정보가 저장되기 때문에, 노출되면 안되는 정보를 저장하는 실수가 생길 수 있다.

        4. 중간자 공격에 취약하다.

        5. 토큰이 한번 발급되면 유효기간이 만료될때 까지 계속 사용이 가능하다..

        -> 강제로 만료시키기가 어렵다. (서버에서 저장하고 있지 않음)

         

         

        인증 과정

        1. 클라이언트에서 로그인 요청

        2. 서버는 검증 후 클라이언트 고유 ID 등의 정보를 payload 에 담는다.

        3. 서버는 암호화할 비밀키를 사용하여 Access Token (JWT) 를 발급 후, 클라이언트에 전달한다.

        (이때, 서버는 JWT를 서버에 저장하지 않는다. -> 세션 방식과 차이점)

        4. 클라이언트는 전달 받은 토큰을 저장한다.

        5. 클라이언트는 서버에 요청할 때마다 토큰을 요청 헤더 Authorization 에 포함 시켜 요청한다.

        6. 서버는 토큰의 Signature를 비밀키로 복호화 하고, 위변조 여부와 유효기간 등을 확인한다.

        7. 유효한 토큰이라면 요청에 응답

        반응형

        'Web' 카테고리의 다른 글

        쉽게 풀어 쓴 OAuth (Federated Identity)  (1) 2023.02.18
        SSO 정리  (0) 2023.02.17
        Cookie/Session & Token (feat. token 주의 사항)  (0) 2023.01.31
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바