개념 및 기본구조
개념
JWT(JSON Web Token)란 ?
JWT 는 웹표준(RFC 7519) 으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 방식으로 정보를 안정성 있게 전달한다.
*cf) 자가 수용적 ( Self-contained) : JWT는 필요한 모든 정보를 자체적으로 갖고 있다 (JWT의 장점 중 하나) JWT 시스템에서 발급된 토큰은 기본정보, 전달할 정보, 검증할 수 있도록 해주는 Singnature 를 포함하고 있다.
기본구조

- JWT는 Header, Payload, Signature 3부분으로 이루어지며 , JSON 형태인 각 부분은 Base64로 인코딩 되어 표현된다. 또한 각각의 부분을 이어 주기 위해 . 구분자를 사용하여 구분한다.
(Base64는 암호화된 문자열이 아니고, 같은 문자열에 대해 항상 같은 인코딩 문자열을 반환한다)
1) Header
- Header 는 토큰의 타입을 지정하고(JWT), Signature 해싱 알고리즘(HMAC-SHA256 or RSA)을 지정한다. 이 알고리즘은 토큰을 검증할 때 사용되는 signature부분에서 사용된다.
2) 정보 (Payload)
- payload는 실제로 토큰에 담을 정보를 지니고 있다. (주로 유효기간, 클라이언트 고유ID) 포함된다.
- key-value 형식으로 이루어진 한 쌍의 정보를 Clain 이라고 한다.
3) Signature
Signature 은 인코딩 된 Header 와 Payload를 더한 뒤 추가로 비밀키를 붙여 해싱하여 생성한다. Header 및 Payload 값은 단순 base64로 인코딩 된 값이기 때문에 해커가 복호화하고 조작할 수 있지만, Signature는 서버측 에서 관리하는 비밀키가 유출되지 않는 이상 복호화 할 수 없다. 그렇기 때문에 토큰의 위변조를 확인하는데 사용된다.
JWT 토큰의 장점
- 인증을 위한 별도의 저장소가 필요 없음 -> 분산 시스템에서의 확장성이 우수하다. (서버가 분산되어 있을 경우에도 인증이 가능하다.)
- 별도의 i/o 작업 없이 토큰을 decode해서 signature를 통해 위변조 파악 가능하다.
- 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다. (토큰 서버 활용)
JWT 토큰의 단점
- 쿠키, 세션과 다르게 JWT는 토큰의 길이가 길어, 인증 요청이 많을수록 네트워크 부하가 심해진다.
- Payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보는 담을 수 없다. (패스워드 등)
- 토큰을 탈취당하면 대처하기 어렵다. 토큰은 한 번 발급되면 유효기간이 만료될 때까지 계속 사용이 가능하다.
- 특정 사용자의 접속을 강제로 만료하기 어렵다. (쿠키/세션 기반 인증은 서버 단에서 쉽게 삭제할 수 있지만 토큰은 그게 안 됨)
Reference
https://velog.io/@whitebear/%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98-%ED%86%A0%ED%81%B0JWT-%ED%99%95%EC%8B%A4%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0
https://velog.io/@dnjscksdn98/JWT-JSON-Web-Token-%EC%86%8C%EA%B0%9C-%EB%B0%8F-%EA%B5%AC%EC%A1%B0