JWT란, Json Web Token의 약자로 웹 애플리케이션에서 정보를 안전하게 전달하기 위한 표준 방식 중 하나이다.
Json형식을 사용해서 정보를 표현하고 서명하여 데이터의 무결성을 보장하는 토큰이다.
JWT는 주로 인증과 권한 부여를 처리하기 위해 사용된다.
주요 특징은 아래와 같다.
- 자가 수용적
- JSON 형식
- 서명(Signature)
- 유효기간
JWT는 필요한 정보를 포함하고 있고 별도의 서버 상태를 필요로 하지 않아, 서버 측에서 토큰을 디코딩하면 정보를 얻을 수 있음으로 자가 수용적이라고 말할 수 있다.
이름을 보면 알수 있듯이 토큰이 JSON형태로 되어 있어 기계와 사람 모두 이해하기 쉽고 가독성이 높다.
토큰에 서명을 추가해서 토큰의 무결성을 검증하고 누가 토큰을 생성했는지 확인할 수 있어 보안적으로 좋다.
유효기간이 존재하여 토큰의 수명 관리하고 만료된 토큰을 거부할 수 있다.
JWT는 Header, Payload, Signature으로 총 세 부분으로 구성되어있다.
헤더는 토큰의 유형과 사용하는 알고리즘(예를 들어, HS256, RSA)과 같은 정보를 갖고 있다.
{
"alg": "HS256",
"typ": "JWT"
}
- alg = 해싱 알고리즘
- typ = 토큰 타입
토큰에 포함되는 클레임(Claim)정보를 담고 있다. 클레임은 사용자, 권한, 발급자, 만료 시간 및 기타 사용자 정의 데이터를 포함할 수 있다.
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
- sub = JWT의 제목
- iss = JWT의 발급자 주체
- aud = JWT의 수취인
- exp = 만료 기간
- iat = 발급 기간
- jti = JWT 식별자, 주로 중복 처리 방지에 사용
토큰의 무결성을 보장하기 위해 생성된 서명 부분이다. 서명은 Header와 Payload의 내용, 그리고 비밀 키를 사용해서 생성된다. 이렇게 Signature가 포함된다면 토큰을 변경하거나 위조하는 시도를 탐지할 수 있다.
JWT는 인증, 세션 관리, 정보 교환, API 보안 등 다양한 웹 및 모바일 애플리케이션에서 사용된다. 특히 OAuth 2.0 및 OpenID Connect와 같은 인증 및 권한 부여 프로토콜에서 많이 활용되며, 사용자의 인증 및 권한을 안전하게 전달하고 관리하는 데 도움을 준다.