#2 JWT란 무엇인가?

찬근·2023년 3월 3일
0

이 글은 JWT 공식문서를 참고하여 작성된 글입니다.

동작

문서에서는 동작 과정 설명에 앞서, JWT 토큰을 다룰 때 주의할 점을 몇가지 명시하고 있습니다.

주의점

  • 보안 문제(CSRF, XSS)를 방지하기 위해 세심한 주의를 기울여야 함
    • 필요 이상으로 토큰을 보관해서는 안됨
  • 민감한 세션 데이터를 브라우저 저장소(localstorage)에 저장해서는 안됨
    • 이 글에서 JWT를 안전하게 저장하는 방법을 확인 할 수 있습니다.

동작 과정

사용자는 보호된 경로 혹은 자원에 접근할 때 일반적으로 Bearer 스키마를 사용하여 Authentication 헤더에서 JWT를 보냅니다. 이때, 헤더의 내용은 다음과 같습니다.

Authorization: Bearer <token>

헤더에 정보를 포함하여 보내면 서버에서 쿼리의 수를 줄일 수도 있습니다. 하지만, 토큰이 너무 커지면 헤더 크기의 허용 범위를 벗어날 수 있기에 조심해야 합니다.

헤더에 토큰이 전송되면 쿠키를 사용하지 않기에 Cross-Origin Resource Sharing (CORS)는 문제가 되지 않습니다.

동작 과정 다이어그램

  1. 애플리케이션 또는 클라이언트가 권한 부여 서버에 대한 권한 부여를 요청합니다.
  2. 권한이 부여되면 권한 서버는 애플리케이션에 액세스 토큰을 반환합니다.
  3. 애플리케이션은 액세스 토큰을 사용하여 보호된 리소스(예: 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 객체이기에 사용이 용이하다.
profile
일관성 있는 개발자

0개의 댓글