Overview
현대 웹 애플리케이션에서 사용자 인증과 정보 교환은 보안성과 효율성이 중요한 요소이다.
JWT(JSON Web Tokens)는 이러한 요구를 충족하기 위해 널리 사용되는 인증 메커니즘 중 하나이다. JWT는 간결하면서도 URL-safe한 형식으로 인증 토큰을 전송하며, 디지털 서명을 통해 위변조를 방지하고, 필요에 따라 암호화도 가능하게 한다.
본 문서에서는 JWT의 기본 개념, 구조, 동작 방식, 그리고 실전 활용 방법에 대해 다루어본다.

JWT(JSON Web Tokens)란?
JSON 웹 토큰(JWT) 은 두 당사자 간에 전송될 클레임을 나타내는 URL 안전 방식의 간결한 수단이다. JWT 내의 클레임은 JSON 객체로 인코딩되며, JSON 웹 서명(JWS)을 사용하여 디지털 서명된다. 선택적으로, JSON 웹 암호화(JWE)를 사용하여 암호화할 수도 있다.
구조
JWT는 일반적으로 헤더(Header), 페이로드(Payload), 서명(Signature)의 세 부분으로 구성되며, 점(.)으로 구분됩니다. 그 구조는 header.payload.signature
이다.
헤더(Header)
헤더는 보통 토큰의 유형(JWT)과 사용되는 서명 알고리즘(예: HMAC SHA256 또는 RSA)의 두 부분으로 구성된다.
{
"alg": "HS256",
"typ": "JWT"
}
페이로드(Payload)
페이로드에는 클레임이 포함됩니다. 클레임은 엔티티(보통 사용자)에 대한 진술과 추가 데이터입니다. 등록된 클레임, 공개 클레임, 개인 클레임의 세 가지 유형이 있다.
- 등록된 클레임(Registered Claims): 이들은 필수는 아니지만 유용한 상호 운용 클레임 세트를 제공하기 위해 미리 정의된 클레임 세트이다. 일부는 iss(발급자), exp(만료 시간), sub(주제), aud(대상자) 등이다.
- 공개 클레임(Public Claims): JWT를 사용하는 이들이 원하는 대로 정의할 수 있다. 그러나 충돌을 피하기 위해 IANA JSON 웹 토큰 레지스트리에 정의되거나 충돌 방지 네임스페이스를 포함하는 URI로 정의되어야 한다.
- 개인 클레임(Private Claims): 동의하는 당사자 간에 정보를 공유하기 위해 생성된 사용자 정의 클레임으로, 등록되지 않았거나 공개 클레임이 아니다.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022
}
서명(Signature)
서명 부분을 생성하려면, 인코딩된 헤더와 인코딩된 페이로드, 비밀키, 헤더에 명시된 알고리즘을 사용하여 서명해야 한다. 예를 들어, HMAC SHA256 알고리즘을 사용하는 경우, 서명은 다음과 같은 방식으로 생성된다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWT의 작동 방식
- 인증(Authentication): 사용자가 로그인한 후, 각 후속 요청에는 JWT가 포함되어, 해당 토큰으로 허용된 경로, 서비스 및 리소스에 접근할 수 있다.
- 정보 교환(Information Exchange): JWT는 예를 들어 공개/개인 키 쌍을 사용하여 서명할 수 있기 때문에, 발신자가 그들이 주장하는 사람인지 확신할 수 있다. 또한, 서명은 헤더와 페이로드를 사용하여 계산되므로, 내용이 변경되지 않았는지도 검증할 수 있다.

JWT Debugger
JWT 공식 사이트에서 JWT Debugger를 통해 HEADER, PAYLOAD, VERIFY SIGNATURE 값을 확인할 수 있다.

마무리
JWT는 사용자 인증과 권한 검증, 그리고 클라이언트-서버 간의 안전한 정보 교환을 위한 강력한 도구이다.
구조적으로는 헤더, 페이로드, 서명의 세 가지 구성요소로 이루어져 있으며,
JSON 포맷을 기반으로 하고 있어 가독성과 활용성이 뛰어나다.
특히, 서버가 세션 상태를 유지하지 않아도 되는 무상태(stateless) 인증 방식으로 인해,
마이크로서비스나 서버리스 환경에서 큰 장점을 제공한다.
하지만 JWT는 만능이 아니며, 토큰 탈취 시 리스크와 토큰 만료 관리 등의 주의사항도 존재한다. 따라서 JWT를 도입할 때는 암호화, 서명 알고리즘, 만료 시간 등의 보안 설정을 철저히 구성하는 것이 중요하다.
보안과 성능을 모두 만족하는 인증 방식을 고민 중이라면, JWT는 그 해답이 될 수 있다.
Reference
https://github.com/somaz94/DevOps-Engineer/wiki/KR_IT%EC%9A%A9%EC%96%B4
'IT 용어' 카테고리의 다른 글
[IT 용어 5.] CI/CD란? (2) | 2024.11.25 |
---|---|
[IT 용어 4.] Semantic Versioning (SemVer)란? (0) | 2024.11.23 |
[IT 용어 2.] 어플라이언스(Appliance)란? (4) | 2024.11.17 |
[IT 용어 1.] Devops, SRE, Cloud/System Engineer (8) | 2024.11.14 |