본문 바로가기
Web

[Web] JWT(Json Web Tokken)

by 차가운개발 2024. 11. 28.

 

 

JWT는 JSON 기반의 사용자 인증 및 정보 교환을 위한 토큰이다

Web 표준을 따르고 있으며 JSON 객체를 사용하여 정보를 전달한다 필요한 모든 정보를 한 객체에 댐아서 전달하기 때문에 JWT 한 가지로 인증을 마칠 수 있다. 웹 표준을 따르기 때문에 대부분의 언어가 이를 지원한다.

 

ㅇ JWT의 구조

위와 같이 .(dot)을 기준으로 세 개의 영역으로 나눌 수 있다

  • 헤더
    JWT의 타입과 서명 알고리즘을 명시한다
  • 페이로드
    토큰에 담길 클레임(데이터)을 포함한다
    사용자 정보, 권한, 토큰 만료 시간 등

    클레임의 유형
    Registered Claims : 표준으로 정의된 클레임
    iss(발급자), sub(주제), aud(대상), exp(만료 시간) 등이 포함된다

    Public Claims : 개발자가 정의한 클레임
    사용자 이름, 이메일 등

    Private Claims
    클라이언트와 서버 간에만 공유되는 클레임
    사용자 권한 레벨, 내부 식별자 등

  • 서명
    토큰의 무결성을 검증하기 위한 부분이다
    헤더와 페이로드를 조합해 비밀키로 암호화하여 생성한다
eyiIsInR5cCI6IkpXVCJ9.eyJzdWIIjoxNTE2MjM5MDIyfQ.SflKxwRadQssw5c

 

완성된 JWT의 형태 .을 기준으로 세 개의 영역이 존재한다

 

ㅇ JSON

name, Value가 한 쌍을 이루는 객체를 말한다

{
    "student":[
        {"firstName":"kim", "lastName":"jinsol"},
        {"firstName":"lee", "lastName":"jaehun"},
        {"firstName":"park", "lastName":"dajung"}
    ]
}

 

student 라는 name 값에 3개의 배열 데이터가 들어 있는 형태다 Value는 배열이 아닌 단순한 String 형태로 구성될 수도 있다

 

ㅇ JWT 특징

  • 자기 포함
    JWT는 필요한 모든 데이터를 자체적으로 포함하고 있어 별도의 데이터베이스 조회 없이도 토큰의 정보를 확인할 수 있다
  • 안전성
    서명을 통해 토큰의 무결성을 보장한다 이를 통해 데이터가 위변조 되지 않았음을 확인할 수 있다
  • 가벼움
    JWT는 JSON 기반으로 설계되어 비교적 크기가 작아 네트워크 전송에 적합하다
  • Base64 URL Encoding
    Base64 URL로 인코딩되므로 URL이나 HTTP 헤더에 안전하게 포함될 수 있다

 

ㅇ 동작원리

  1. 사용자가 로그인하면 서버는 사용자의 정보를 기반으로 JWT를 생성하고 클라이언트에 전달
  2. 클라이언트는 이 JWT를 HTTP헤더에 포함해 서버에 요청을 보냄
  3. 서버는 전달받은 JWT의 서명을 검증하여 요청을 처리하거나 거부함

 

 

 

 

참고 : https://velog.io/@vamos_eon/JWT%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80-1

'Web' 카테고리의 다른 글

[Web] CSRF & XSS  (0) 2024.11.28
[Web] Authentication & Authorization  (0) 2024.11.28
[Web] OAuth  (2) 2024.11.28
[Web] Web과 WAS의 차이  (0) 2024.11.27
[Web] REST API  (1) 2024.11.27