💐 Spring/Spring Security

5. JWT 구조에 대해서

2021. 10. 27. 23:06
목차
  1. JWT란?
  2. JWT 구조
  3. 클라이언트 - 서버 간 JWT 토큰 생성
  4. JWT 어떻게 검증할까?
반응형

이 포스트는 데어 프로그래밍님의 유튜브 강의를 듣고 나서 정리한 글입니다.

 

JWT란?

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

jwt.io에 가보면 JWT를 이렇게 설명합니다.

  • JWT로 주고받는 정보는 디지털 서명이 되어있으므로 확인하고 신뢰할 수 있다.
  • JWT는 HMAC SHA256 (HS256) 알고리즘을 사용한다.
  • JWT는 정보를 암호화하여 주고받을 수 있지만, 서명된 토큰에 중점을 둘 것. ("이건 내가 보낸게 맞아!" 라는 서명, 인증에 중점을 두었다.)

 

JWT 구조

출처 : https://jwt.io

(.)을 기준으로 세가지 부분으로 나뉜다.

  • Header
  • Payload
  • Signature

 

완성된 토큰은 이렇다.

xxxxx.yyyyy.zzzzz

 

Header

{
  "alg": "HS256",
  "typ": "JWT"
}
  • 어떤 알고리즘으로 암호화를 했는지
  • 토큰의 타입이 무엇인지

 

Payload

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
  • Payload에는 클레임을 포함하고 있습니다.
  • 등록된 클레임
    • iss(발급자)
    • exp(만료시간)
    • sub(제목)
    • aud(대상)
    • 등등..
  • 공개 클레임
    • 내가 원하는 값들을 Key : value 형식으로 넣으면 된다.
  • 비공개 클레임
    • 당사자 간에 정보를 공유하기 위해 생성된 맞춤 클레임

 

Signature

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

Signature에는 Base64Url로 인코딩 된 header, payload, 시크릿 키를 가지고 HMAC256 알고리즘으로 암호화를 한 것입니다.

 

클라이언트 - 서버 간 JWT 토큰 생성

 

JWT 어떻게 검증할까?

이전에 Signature는 Header와 Payload와 시크릿 키로 HS256 암호화 알고리즘으로 생성한다고 했습니다.

  • header
  • payload
  • secret_key

아래의 과정을 거쳐 토큰을 검증할 수 있습니다.

  1. 클라이언트에서 넘겨준 요청헤더에 JWT을 header, payload, signature 세가지로 분류한다.
  2. header와 payload를 base64UrlEncode한다.
  3. secret_key를 가지고 HMAC256 암호화를 하면? signature가 생성된다.
  4. 이제 방금 생성한 Signature와 클라이언트가 준 signature를 비교해본다.

 

이전 시간에 배웠던 Session을 사용했을 때보다 가장 큰 장점은 서버마다 세션 저장소니 스티키 세션이니 뭐니 하는 짓을 안해도 된다는 것입니다.

왜?

모든 서버들이 JWT를 검증하기 위해 {secret_key} 만 알고있으면 해당 서버에서 인증까지 마칠 수 있기 때문이다!

 

감사합니다.

반응형
저작자표시 (새창열림)
  1. JWT란?
  2. JWT 구조
  3. 클라이언트 - 서버 간 JWT 토큰 생성
  4. JWT 어떻게 검증할까?
'💐 Spring/Spring Security' 카테고리의 다른 글
  • 7. JWT를 이해하기 전 Basic, Bearer 방식
  • 6. JWT를 사용하기 위한 프로젝트 세팅
  • 4. JWT를 이해하기 전 RSA에 대해서
  • 3. JWT를 이해하기 전 CIA 대해 이해하기
iseunghan
iseunghan
꾸준하게 열심히..
iseunghan꾸준하게 열심히..
iseunghan
iseunghan

공지사항

  • 어제보다 나은 오늘이 되기 위해 🔥
  • 분류 전체보기 (262)
    • 💐 Spring (14)
      • 개념 및 이해 (2)
      • Spring 핵심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB 접근 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • 자바 ORM 표준 JPA 프로그래밍 (20)
      • 알고리즘, 자료구조 (13)
      • 디자인 패턴 (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • 🔖 Snippets (3)
      • Javascript (3)
    • ⚙️ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • 📬 Kafka (1)
    • 💬 ETC.. (4)
      • 💻 macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (3)
    • 📚 Databases (15)
      • 오라클로 배우는 데이터베이스 개론과 실습(2판) (3)
      • RealMySQL 8.0 (8)
    • 🔥 Computer Science (5)
      • 📡 네트워크 (5)
    • 🏷️ 협업 (1)
    • 📜 코딩테스트 (38)
      • BAEKJOON\수학 1, 수학 2 (8)
      • BAEKJOON\재귀 (5)
      • BAEKJOON\브루트 포스 (3)
      • BAEKJOON\정렬 (1)
      • BAEKJOON\백트래킹 (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이분탐색 (1)
      • BAEKJOON\다이나믹 프로그래밍 (9)
      • BAEKJOON\그리디 알고리즘 (0)
    • ✨ ISEUNGHAN (1)

인기 글

최근 글

전체
오늘
어제
반응형
hELLO · Designed By 정상우.
iseunghan
5. JWT 구조에 대해서
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.