ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JWT(JSON Web Token) 란
    얇게 공부한 CS 2024. 3. 1. 14:57

    JWT는 인증에 필요한 정보를 암호화한 JSON 형식의 토큰으로, 웹 서비스의 인증 방식으로 사용할 수 있습니다.

    JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트를 실별할 수 있도록 합니다.

    JWT의 기본 구조

    JWT는 크게 Header, Playload, Signature로 세 가지의 구성 요소로 이루어져 있습니다.

    사용자가 인증을 수행하면, 서버는 다음의 정보를 가진 JWT 토큰을 발급합니다.

     

    - Header

    사용할 해시 알고리즘과 토큰의 타입을 포함하는 메타 정보를 담습니다.

     

    - Payload

    사용자의 클레임 등을 키-값 쌍으로 담은 정보입니다.

    이 정보는 서버로 전달되어 인증에 사용됩니다.

     

    - Signature

    헤더와 페이로드를 합친 후, 비밀키해싱하여 생성한 서명입니다.
    Client에게 함께 전달하며, 이를 통해 토큰의 무결성과 변조 방지가 보장됩니다.

    aaaaa[Header].yyyyy[Payload].zzzzz[Signature]

    토큰 형식은 위와 같이 되어 있고, 각 부분이 점으로 구분됩니다.

    | JWT 인증 과정

    JWT의 인증 과정은 다음과 같이 진행됩니다.

     

    1. 사용자가 로그인과 같은 인증을 수행합니다.

    2. 서버는 사용자의 정보를 바탕으로 JWT를 생성하고 이를 사용자에게 전달합니다.

    3. 사용자는 이후 요청에서 이 토큰을 서버에 제공합니다.

    4. 서버는 토큰의 Signature를 검증하여 사용자를 인증합니다.

     

    해당 과정에서 서버가 가지고 있는 비밀키(Secret Key)를 사용합니다.

     

    또한 사용자는 서버가 처음에 부여했던 권한만큼의 작업을 요청할 수 있고,

    데이터를 변경하면 해시 값이 변경되므로, 악의적인 공격자가 Payload를 수정하는 것이 불가능합니다.

    | 장단점

    장점

    - 세션 기반 인증과 비교하여 서버가 세션 정보를 따로 저장할 필요가 없어 서버 자원을 절약할 수 있습니다.

    - 무상태성(stateless)을 유지할 수 있으며, 서로 다른 웹 서버 간에도 잘 작동합니다. (웹 브라우저의 쿠키와 다른 점)

    단점

    - 세션에 비하여 토큰의 길이가 길 수 있습니다.

    - 페이로드는 암호화되지 않으므로 중요 정보를 포함시키기에 적합하지 않습니다.

    - 토큰이 탈취될 경우 보안상 문제가 발생할 수 있습니다. (따라서 토큰에 사용 기한을 부여)

    | 유의사항

    - 페이로드민감 정보를 포함시키지 않도록 해야 합니다. 만약 필요하다면, 내용을 암호화하는 것을 고려해야 합니다.

    - JWT는 주로 위조 방지서버의 부하 경감을 목적으로 사용됩니다.

     

     

    '얇게 공부한 CS' 카테고리의 다른 글

    Oauth  (0) 2024.02.27
    HTTP(HyperText Transfer Protocol) 이해하기  (0) 2024.02.26
    REST API  (0) 2024.02.25
    명령어의 구조  (0) 2024.02.24
    쿠키(Cookie)와 세션(Session)  (0) 2024.02.23
Designed by Tistory.