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 헤더에 안전하게 포함될 수 있다
ㅇ 동작원리
- 사용자가 로그인하면 서버는 사용자의 정보를 기반으로 JWT를 생성하고 클라이언트에 전달
- 클라이언트는 이 JWT를 HTTP헤더에 포함해 서버에 요청을 보냄
- 서버는 전달받은 JWT의 서명을 검증하여 요청을 처리하거나 거부함
'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 |