웹 보안에서 쓰이는 JWT 에 대해 정리해보았다.
JWT
Json Web Token의 줄임말로 자바스크립트의 JSON 자료구조를 가지고 있으며, Web Token으로써 사용할 수 있다는 의미이다. 주로 JWT 토큰은 사용자 인증과 로그인 유지를 위해 쓰인다.
JWT의 구조
JWT는 헤더, 페이로드, 시그니처 구조로 이루어진다.
aaaaaaa.bbbbbbb.ccccccc // 헤더.페이로드.시그니처
헤더
서명 시 사용하는 키(kid). 토큰 타입(typ), 서명 암호화 알고리즘(alg) 정보가 들어있다.
// 예 { "kid" : "Key ID", "typ" : "JWT", "alg" : "ES256" }
페이로드
내용에서는 전달하는 데이터를 포함할 수 있으며 데이터 각각의 Key를 claim이라고 부른다.
그래서 사용자 정보의 한 조각인 클레임(claim)이 들어있다. claim에는 3가지 종류로 registered, public, private가 있다.
시그니처
Signature는 헤더와 페이로드의 문자열을 합친 후에, 헤더에서 선언한 알고리즘과 key를 이용해 암호한 값이다. • Header(헤더) 와 페이로드(Payload)는 단순히 인코딩된 값이기 때문에 제 3자가 복호화 및 조작할 수 있지만, Signature(서명)는 서버 측에서 관리하는 비밀 키가 유출되지 않는 이상 복호화할 수 없습니다. 이는 토큰의 위변조 여부를 확인하는데 사용된다.
JWT 인코딩
JWT 장단점
장점
단점