본문 바로가기
프로그래밍/Java & Spring

JWT란 무엇인가?

by 방구석개발자 2024. 8. 7.
반응형

JWT란?

https://jwt.io/introduction

JWT는 "JSON Web Token"의 약자로, 웹 애플리케이션에서 인증과 권한 부여를 위한 토큰 기반 시스템입니다.
JWT는 기본적으로 서버와 클라이언트 간의 정보를 안전하게 전송하는 데 사용됩니다. 다음은 JWT의 주요 개념입니다:

 

JWT의 구조

JWT는 세 가지 부분으로 구성됩니다:

  1. 헤더 (Header): 토큰의 타입과 사용된 암호화 알고리즘을 설명합니다. 일반적으로 JSON 형태로 alg와 typ 필드를 포함합니다.
    1. Typ (type): 토큰의 타입을 나타내며, JWT로 설정됩니다.
    2. Alg (algorithm): 서명에 사용된 알고리즘을 나타냅니다. 예를 들어, HMAC SHA256 또는 RSA 등이 있습니다.
    3. 이 부분은 Base64로 인코딩됩니다.
  2. 페이로드 (Payload): 토큰의 내용을 담고 있는 부분으로, 클레임(Claims)이라고도 불립니다. 클레임은 사용자 정보나 기타 메타데이터를 포함할 수 있습니다. 클레임에는 다음과 같은 종류가 있습니다:
    1. 등록된 클레임 (Registered Claims): sub(주제), iat(발급 시간) 등
    2. 공식 클레임 (Public Claims): 사용자 정의 클레임으로 충돌을 피하기 위해 표준화된 값 사용
    3. 비공식 클레임 (Private Claims): 애플리케이션에 의해 정의된 클레임
  3. Signature (서명):
    1. 헤더와 페이로드를 조합하여 비밀 키를 사용해 서명한 것입니다.
    2. 서명은 JWT의 무결성을 보장하며, 토큰이 중간에 변조되지 않았음을 증명하는 역할을 합니다.

JWT 사용 예시

  1. 인증: 사용자가 로그인하면 서버가 JWT를 생성하여 클라이언트에 반환합니다. 클라이언트는 이후의 요청에 이 토큰을 포함시켜 인증을 요청합니다.
  2. 정보 교환: 서버와 클라이언트 간의 정보를 안전하게 교환할 수 있습니다. JWT는 암호화되어 있지 않지만 서명되어 있어 무결성이 보장됩니다.

JWT의 장점

  • 자급자족 (Self-contained): JWT는 사용자와 관련된 모든 정보를 담고 있으므로 추가적인 데이터베이스 조회가 필요 없습니다.
  • 간편한 사용: 클라이언트와 서버 간의 인증 및 정보 전달이 간편합니다.
  • 보안: 서명을 통해 JWT의 무결성을 검증할 수 있습니다.

JWT 사용 시 주의사항

  • 비밀키 관리: 서명에 사용된 비밀키는 외부에 노출되지 않도록 주의해야 합니다.
  • 토큰 만료: 토큰에는 만료 시간이 설정되어 있어야 하며, 만료된 토큰을 사용할 수 없도록 해야 합니다.

JWT는 현대의 웹 애플리케이션에서 인증과 권한 부여를 구현하는 데 매우 유용한 도구입니다.

 

JWT 예시

출처: https://jwt.io/introduction

 

다음 포스팅에서는 Spring Boot를 사용하여 JWT 기반 인증 기능을 구현하는 방법을 단계별로 설명하겠습니다.

반응형

댓글