Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

AI가 번역한 다른 언어 보기

Seize the day

JWT(JSON Web Token)이란?

  • 작성 언어: 한국어
  • 기준국가: 모든 국가 country-flag

언어 선택

  • 한국어
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

durumis AI가 요약한 글

  • JSON Web Token(JWT)는 JSON 객체를 사용하여 정보를 안전하게 전송하는 표준으로, 토큰에 필요한 정보를 담아 암호화하여 사용합니다.
  • JWT는 헤더, 페이로드, 서명으로 구성되며, 헤더에는 토큰 타입과 사용된 서명 알고리즘, 페이로드에는 토큰에 대한 정보를 key-value 형태로 저장합니다.
  • 서명은 토큰을 발행한 서버만이 개인키로 풀 수 있으며, JWT는 자체적으로 모든 정보를 가지고 있어 별도의 저장소가 필요하지 않아 분산 시스템에서의 확장성이 높습니다.

JWT란?

JSON Web Token(JWT)은 JSON 객체로 정보를 안전하게 전송하는 방법의 일종으로 공개된 표준(RFC 7519)이다. 말 그대로 필요한 정보들을 token에 담아 암호화 시켜 사용하는 것입니다.


JWT는 서명된 토큰(signed token)이라고 강조되고 있다. 공개/개인 키를 쌍으로 사용하여 서명할 경우 이 서명은 비공개 키를 보유하고 있는 당사자만이 그 토큰을 서명했다는 것을 보장한다. 즉, 키를 보유한 서버가 이 토큰이 정상적인지 알 수 있다.


JWT 구조

JWT는 헤더(Header), 페이로드(Payload), 서명(Signature)으로 구성 되어 있다.

각 부분은 Base64로 인코딩 되고, 점(.)으로 구분자로 사용된다. 

xxxxx.yyyyy.zzzzz

Header

{
    "alg": "HS256",
    "typ": "JWT"
}

헤더에는 두가지의 주요 정보를 가지고 있다. 토큰의 타입(typ)와 사용된 서명 알고리즘(alg)이다. 서명 알고리즘은 서명을 생성하고 검증할 때 사용된다.

typ은 "JWT"로 지정되며, alg는 HMAC, SHA256 등 작성한다. 위 예시대로라면 개인키로 HS256 알고리즘을 사용한다. 라는 의미이다. 

Payload

{
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022
}


페이로드는 토큰에 전달하고자 하는 Claim을 포함한다. 사용자 식별 정보 또는 토큰에 대한 property를 key-value 형태로 저장한다. 즉, 개발자 마음대로 넣어도 된다!

표준 스펙상 key의 이름은 컴팩트하게 3글자로 정의한다.

registered claim은 아래와 같이 있다. 

  • iss (Issuer) : 토큰 발행자(토큰 발행자의 고유 식별 정보를 포함)
  • sub (Subject) : 토큰이 대상으로 하는 주체
  • aud (Audience) : 토큰 수신자
  • exp (Expiration Time) : 토큰 만료 시간 (이 시간이 지나면 더이상 유효 하지 않음)
  • nbf (Not Before) : 토큰 활성 날짜 (이 시간 이전에는 토큰을 사용 할 수 없음)
  • iat (Issued At) : 토큰 발행 시간
  • jti (JWT Id) : JWT 토큰 식별자 (issuer가 여러 명일 때 이를 구분하기 위한 값)


이 외의 값들 중 필요한 값이 있다면 추가해서 사용해도 무관하다. 

단, payload는 암호화가 되지 않은 서명된 값이 아니기 때문에 민감한 정보를 담지 않는다.

디코딩하면 누구나 열람이 가능하다. jwt.io 사이트에서도 바로 확인 할 수 있다.

Signature

HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    your-256-bit-secret
)

Header와 Payload를 base64로 인코딩 값을 구분자 점(.)으로 연결하고 your-256-bit-secret 서버가 가지고 개인키를 사용하여 서명한다. 

따라서 서명(Signature)은 토큰을 발행한 서버만이 개인키로 암호화를 풀 수 있다.

복호화를 생각해 보면, 개인키로 Signature를 복호화한 다음 base64UrlEncode(header)가 JWT의 heaer값과 일치한 지, base64UrlEncode(payload) 와 일치한 지 확인하면 알 수 있다. 

서명을 제외한 헤더와 페이로드는 인코딩만 되어 있어 본문의 정보를 볼 수 있지만, 서명을 통해 정보의 무결성과 보안이 유지된다. 



JWT는 필요한 모든 정보를 자체적으로 가지고 있는 Self-contained로, stateful 해야 하는 세션의 단점을 보완하기 위해 만들어진 JWT는 별도의 저장소가 필수적이지 않다. 

서버 측에서 세션을 유지할 필요 없어 stateless하여, 분산 시스템이나 마이크로서비스 아키텍처에서의 확장성이 높다. 

Signature, 디지털 서명을 통해 보호되며, 데이터의 무결성을 보장할 수 있다. 

nofunfromdev
Seize the day
Seize the day
nofunfromdev
[Spring] Filter, Interceptor, Argument Resolver란? 필터는 웹 컨테이너에서 동작하며, 디스패처 서블릿에 요청이 전달되기 전/후에 추가 작업을 처리할 수 있는 기능을 제공합니다. 주로 요청 파라미터 검증 및 처리, 보안 관련 공통 작업, 로깅, 이미지/데이터 압축, 문자열 인코딩 등에 사용됩니다.
제이온
제이온
제이온
제이온
제이온

2024년 4월 27일

월드코인 홍채인식 과연 안전한가? 월드코인은 홍채 인식을 통해 무료 코인을 제공하지만, 개인정보 보호 측면에서 여러 문제점이 있어 신중하게 접근해야 합니다. 개인정보 매매 논란, 정보 이용 및 처리 불투명성, 해외 서버로의 정보 이전 위험, 해외 금지 및 조사 등이 발생할 수 있으며, 정보 이용 목적과 용도가 명확하지 않습니다.
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

2024년 3월 31일

Java Collections Framework(JCF)란? - JCF의 정의와 특징 (JAVA) Java Collections Framework(JCF)는 자바에서 데이터를 쉽고 효과적으로 처리할 수 있도록 표준화된 방법을 제공하는 클래스 집합입니다. JCF는 데이터 저장 자료 구조와 처리 알고리즘을 클래스로 구현하여 코드 재사용성을 높이고, 개발 시간을 단축하며 프로그램 성능과 품질을 향상시킵니다.
제이온
제이온
제이온
제이온

2024년 4월 27일

유료 공동인증서 대신, 무료 금융인증서를 쓰자! 공동인증서 대신 무료로 사용할 수 있는 금융인증서 발급 방법과 사용처를 알려드립니다. 3분 만에 발급 가능하며, 3년 동안 사용할 수 있습니다.
길리
길리
길리
길리
길리

2024년 4월 17일

개념적 데이터 모델링 개념적 데이터 모델링은 정보를 엔티티로 분리하고, 엔티티 간의 관계를 ERD로 표현하는 과정입니다. 엔티티는 독립적인 데이터 저장 단위이며, 속성은 엔티티가 가진 데이터를 의미합니다. ERD에서는 식별자를 사용하여 엔티티를 고유하게 식별하며, 식별자는 기본 키, 후보 키, 대체 키, 중복 키 등으로 구분됩니다. 엔티티 간의 관계는 존재에 의한 관계와 행위에 의한 관계로 나뉘며, 카디널리티와 옵셔널리티를 통해 수적 관계와 필수/선택적 관계를 표현합니다.
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024년 4월 8일

[이펙티브 자바] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩터리 메서드는 생성자 대신 인스턴스를 생성하는 데 사용할 수 있는 유용한 방법입니다. 이름을 가질 수 있고, 생성자보다 더 많은 유연성을 제공하며, 플라이웨이트 패턴, 싱글톤 패턴, 서비스 제공자 프레임워크와 같은 디자인 패턴을 구현하는 데 사용할 수 있습니다.
제이온
제이온
제이온
제이온

2024년 4월 27일