Json Web Token의 줄임말로써
사용자 인증을 위해 json 형태로 암호화된 웹 토큰이자 인터넷 표준 인증 방식이라고 볼 수 있다.
그럼 토큰이란 무엇인가?
토큰은 '징표'라는 의미로, 상품이나 서비스 교환권을 뜻하며 화폐 기능을 대신하는 것을 말한다.
이것을 IT에 가깝게 말하자면 보안 객체의 접근 관리에 사용되는 장치이다.
HTTP의 가장 큰 특징이 stateless는 보안을 위해 로그인시 해당 유저 정보를 보존해놓지 않는다.
다만, 개별 입장권이라 볼 수 있는 JWT가 이를 가능하게 만든다.
마치 우리가 놀이공원에 갈 때 BIG3, 자유이용권, 오후권 등 다른 이용 권한을 가진 표를 사듯
JWT 역시 각기 다른 권한을 부여할 수 있는 인증 티켓이라고 볼 수 있는 것이다.
데이터 요청시 HTTP 헤더에 토큰을 담아 요청한다.
JWT는 Header.Payload.Signature 세 가지로 구성되어 있다.
{ "typ" : "JWT", "alg" : "HS512" }
Header는 토큰의 타입이나, 서명 생성시 어떤 알고리즘을 썼는지 저장한다.
{ "sub" : "1", // sub(subject) - 토큰명(식별값) "iss" : "sy", // iss(issuer) - 토큰 발급자 "exp" : 163698715, // exp(expiration time) - 토큰 만료 시간 "iat" : 163698715, // lat(issued at) - 토큰 발급 시간 }
Payload는 토큰에 대한 정보(Claim)를 키-밸류 형태로 저장한다.
key값은 보통 3글자로 되어있다.
payload에는 민감한 정보를 담지 않아야 하는데, header와 payload는 특정 암호화가 걸려있는 부분이 아니기 때문에 누구나 디코딩시 해당 부분에 담긴 정보를 알 수 있기 때문이다.
따라서 JWT는 유저를 단순 식별하기 위한 정보만을 담아야 한다.
HMASCSHA512( base64UrlEncode(header) + "." + base64UrlEncode(payload), your-256-bit-secret )
이는 signature를 디코딩했을시 보게되는 화면으로써, header와 payload를 디코딩한 값과 서버에 있는 개인키(your-256-bit-secret)가 보여지게 된다.
signature는 개인키를 가지고서만 복호화할 수 있다.
데이터를 주고 받는 형식 중에 JSON은 데이터를 key와 value 형태로 받는 방식을 말한다.
서버와 클라이언트에서 처리할 데이터를 주고받을 때 쓰는 자료 형식에는 대표적으로 XML와 JSON이 있다.
XML은 eXtensible Markup Language의 줄임말로 다목적 마크업 언어로 html처럼 태그로 둘러쌓여 있다.
xml에서 JSON으로 대체되는 것이 추세인데 그 이유는
- JSON은 특정 언어에 종속되지 않는다.
- xml보다 작은 용량으로 데이터 전송이 가능하다.
- xml보다 구조 정의의 용이성과 가독성이 뛰어나다.
위와 같은 장점을 JSON이 갖고 있기 때문이다.
🔗 참고 자료
JWT(JSON Web Token)의 개념부터 구현까지 알아보기
WT(Json Web Token) - 비대칭키 기반 토큰 인증 방식
JWT의 단점과 주의사항
JSON과 XML의 개요 및 차이점