본문 바로가기

Spring Boot/Security 토큰 기반 인증,인가

JWT의 구조, 원리 : JWT의 정의와 표준

Json Web Token

RFC 7519 : https://datatracker.ietf.org/doc/html/rfc7519

 

 - JWT의 정의와 표준 이해

 - JWT가 토큰 기반 인증에서 어떤 위치를 차지하는가

 - JWT가 주로 사용되는 활용 사례

 - JWT가 왜 널리 사용되는가?

 - JWT를 사용할 때 고려해야할 장단점


JWT의 정의, 표준

1. JWT(JSON Web Token)

JSON 객체를 이용하여 안전하게 정보를 주고 받기 위한 토큰 형식임

RFC 7519 표준으로 정의되어 있으며, 주로 인증(Authentication)과 권한 부여(Authorization) 를 위해 사용된다

  • JSON 기반 : 사람이 읽기 쉽고 기계가 처리하기 쉬운 JSON 형식으로 작성된다
  • URL-safe : URL에 포함될 수 있도록 Base64URL 방식으로 인코딩된다
  • 자가 포함(Self-Contained) : 토큰 자체에 필요한 정보(사용자 정보, 권한 등)를 담고 있어서 별도의 조회가 필요하지 않음

JWT 토큰의 구조, Header.Payload.Signature

 

 

 

2. JWT의 표준(RFC 7519)

JWT는 IETF(Internet Engineering Task Force)에서 발행하는 RFC 7519 문서로 표준화되었음

IETF 는 인터넷 기술의 표준을 개발하고 관리하는 국제 조직임

HTTP, TCP/IP, SMTP 등 대부분의 인터넷 핵심 프로토콜 표준을 정의한다

 

여기임

https://www.ietf.org/

 

RFC 7519의 주요 특징

  • 컴펙트함(Compact) : 짧고 간단한 문자열로 표현된다
  • URL-safe : 웹 환경에서 안전하게 전달 가능
  • JSON 기반 Claims 를 포함하고 있다
# ?
RFC 7519: JSON Web token(JWT)

 

 

  • RFC 문서를 직접 읽는 것은 초심자에겐 어렵다
    실무에서는 요약된 자료를 보고, 실제로 JWT를 발급, 검증해보는 과정을 거치는게 좋음
  • JWT는 "표준화된 규격"이라는 점 때문에 다양한 언어와 프레임워크에서 지원하고 있다

 


토큰 기반 인증에서 JWT의 위치

1. 세션 기반 인증과 토큰 기반 인증 비교

전통적 인증은 세션 기반 인증으로, 서버가 사용자의 상태(Session)를 저장한다

이에 대해 확장성 문제로 인해 토큰 기반 인증이 등장했음

 

구분  세션 기반 인증 JWT 활용 토큰 기반 인증
상태 관리 서버에 저장 클라이언트(토큰)에 저장함
확장성 서버 메모리 증가로 한계 존재 stateless, 확장성 좋음
성능 매 요청마다 서버에서 조회가 필요 토큰 검증 로직만 통과하면 됨

 

 

 

2. JWT의 위치

토큰 기반 인증 방식에서 JWT는 가장 널리 사용되는 토큰 방식이다

사용자 로그인 -> 서버 인증 -> JWT 발급 -> 클라이언트 저장
	-> API 요청시 JWT 포함 -> 서버가 JWT 검증 후 응답함

 

 

  • 마이크로서비스 아키텍처(MSA) 환경에서 JWT가 특히 많이 사용된다
    서버간 인증이 필요할 때, 세션보다 JWT가 훨씬 효율적이다
  • 토큰이 탈취되면 심각한 보안 문제가 생길 수 있으므로 만료 시간과 보안 설정을 신중하게 해야한다

 

구분 세션 기반 인증 토큰 기반 인증(JWT)
상태 저장 서버 클라이언트
확장성 낮음 높음
사용성 쿠키 기반 헤더 / 파라미터 기반

JWT 활용 예

1. 웹 애플리케이션 인증

웹 서비스에서 로그인 성공시 JWT를 발급하고, 이후 모든 요청에 토큰을 포함시켜서 사용자의 인증을 처리한다

// 로그인에 성공하면 토큰을 발급한다, 라이브러리 사용 전 단순 예시
String jwt = JwtBuilder()
    .addClaim("userId",12345)
    .addClaim("role","USER")
    .setExpiration(3600)
    .signWith("secretKey")
    .build();

 

 

2. 모바일 앱 인증

모바일 앱은 세션 유지가 어려운 환경이므로 JWT를 활용하여 Stateless 인증을 구현하는 경우가 많다

 

 

3. 서버간 통신

MSA 구조에서 서로 다른 서버간 API 호출시 JWT를 사용하여 보안을 강화할 수 있다

마이크로 서비스 아키텍처(MSA)에서도 JWT 기반 인증이 사용된다

 

 

  • JWT는 인증뿐만 아니라 정보 전달에도 활용할 수 있다
    결제 서비스에서 사용자의 정보와 거래 정보를 안전하게 전달할 때 사용할수도 있다
  • 단, 민감한 정보(비밀번호, 주민등록번호 등)는 절대 JWT에 담지 말아야한다. 범죄임

 

활용사례 설명
웹 인증 로그인 후 JWT를 활용한 인증
모바일 인증 모바일 환경에서 Stateless 인증
서버간 통신 마이크로서비스 간 안전한 데이터 교환