이 글은 JWT 공식문서를 참고하여 작성된 글입니다.
동작
문서에서는 동작 과정 설명에 앞서, JWT 토큰을 다룰 때 주의할 점을 몇가지 명시하고 있습니다.
주의점
- 보안 문제(CSRF, XSS)를 방지하기 위해 세심한 주의를 기울여야 함
- 민감한 세션 데이터를 브라우저 저장소(localstorage)에 저장해서는 안됨
- 이 글에서 JWT를 안전하게 저장하는 방법을 확인 할 수 있습니다.
동작 과정
사용자는 보호된 경로 혹은 자원에 접근할 때 일반적으로 Bearer 스키마를 사용하여 Authentication 헤더에서 JWT를 보냅니다. 이때, 헤더의 내용은 다음과 같습니다.
Authorization: Bearer <token>
헤더에 정보를 포함하여 보내면 서버에서 쿼리의 수를 줄일 수도 있습니다. 하지만, 토큰이 너무 커지면 헤더 크기의 허용 범위를 벗어날 수 있기에 조심해야 합니다.
헤더에 토큰이 전송되면 쿠키를 사용하지 않기에 Cross-Origin Resource Sharing (CORS)는 문제가 되지 않습니다.
동작 과정 다이어그램

- 애플리케이션 또는 클라이언트가 권한 부여 서버에 대한 권한 부여를 요청합니다.
- 권한이 부여되면 권한 서버는 애플리케이션에 액세스 토큰을 반환합니다.
- 애플리케이션은 액세스 토큰을 사용하여 보호된 리소스(예: API)에 액세스합니다.
JWT 권장 이유
문서에서는 Simple Web Tokens(SWT) 및 Security Assertion Markup Language Tokens(SAML) 과 비교하여 JWT를 권장하는 이유를 설명합니다.
SWT, SAML에 대해서는 학습이 부족하기에 JWT의 장점만을 나열해보겠습니다.
- 작은 크기
- JSON parsers는 객체에 직접적으로 매핑됨
JWT 정리
- JSON Web Token의 준말이다.
- JSON 객체로 정보를 안전하게 전달한다.
- Authorization, Information Exchange 등에 사용된다.
- 일반적으로 Header, Payload, Signature 구조를 가진다.
- 쿠키 기반이 아니므로 CORS 문제에서 자유롭다.
- CSRF, XSS와 같은 보안 문제가 발생할 수 있기에 조심히 다루어야 한다.
- 브라우저 저장소에 민감한 세션 데이터를 저장해서는 안된다.
- 크기가 크지 않고, JSON 객체이기에 사용이 용이하다.