본문 바로가기
Web/Back

[Spring] JWT란? 토큰 기반 인증과 리프레시 토큰

by 옥돔이와 연근이 2025. 2. 20.
728x90
반응형

 📍 토큰 기반 인증      

 사용자가 서버에 접근할 때 인증하는 확인 방법으로 서버 기반 인증 토큰 기반 인증이 있다. 스프링 시큐리티에서는 기본적으로 세션 기반 인증을 제공하고, 토큰 기반 인증은 말 그대로 토큰을 사용하는 방법이다. 

 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값인데 서버가 토큰을 생성해서 클라이언트에게 제공하면, 클라이언트는 이 토큰을 갖고 있다가 여러 요청을 해당 토큰과 함께 신청한다. 그럼 서버는 토큰만 보고 유효한 사용자인지 검증한다.

 

1) Spring Security에서 JWT를 사용하는 흐름

  1. 로그인 요청 처리:
    • 사용자가 ID와 비밀번호를 서버로 전송한다.
    • Spring Security가 제공하는 AuthenticationManager를 통해 사용자 인증을 수행한다.
  2. JWT 생성 및 반환:
    • 인증에 성공하면 서버는 JWT를 생성하고 클라이언트에게 반환한다.
    • 클라이언트는 JWT를 로컬 스토리지나 쿠키에 저장한다.
  3. 요청 시 JWT 전송:
    • 클라이언트는 이후 요청 시 Authorization 헤더에 JWT를 포함하여 보낸다.
  4. JWT 검증:
    • 서버는 요청의 JWT를 검증하여 유효성을 확인하고, 사용자 정보를 추출한다.
    • 유효한 토큰이면 요청을 처리하고, 그렇지 않으면 401 Unauthorized를 반환한다.

 


2) 토큰 기반 인증의 장점

  • 무상태성
    :사용자 인증 정보가 담긴 토큰이 서버가 아닌 클라이언트에 있음. 서버가 세션을 유지 않아도 되는 무상태로 효율적인 검증 가능
  • 확실성
    : 서버를 확장할 때 상태 관리를 신경 쓸 필요가 없기에 서버 확장에 용이함. 
  • 보안성
    : 토큰 발급 이후에는 토큰 정보를 변경하는 행위가 불가능. 즉, 서명 기반으로 위변조를 방지함.

 


JWT는 세 가지 주요 부분으로 구성되며, Header, Payload, Signature를 포함한다. 이들 세 부분은 각각 Base64Url로 인코딩된 후 .으로 연결된다.

3) JWT 구성 요소

  • Header (헤더): 토큰 타입과 서명 알고리즘 정보를 포함한다.
  • Payload (페이로드): 토큰에 담을 클레임(Claim) 정보를 포함한다.
  • Signature (서명): 토큰의 무결성을 보장하기 위해 생성된 서명이다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

 


4) 리프레시 토큰(Refresh Token)

엑세스 토큰(Access Token)의 수명을 연장하기 위해서 사용되며, 일반적으로 두 개의 토큰을 함께 사용하여 보안성과 유연성을 높임.

 토큰의 유효기간을 짧게 하면 보안적으로 안전하겠지만 사용자 입장에서는 짧은 시간만 활용할 수 있기에 불편하다. 이러한 불편함을 해결하기 위해 리프레시 토큰이 등장함. 이는 엑세스 토큰과 별개의 토큰으로, 사용자 인증을 위한 용도가 아닌 엑세스 토큰이 만료되었을 때 새로운 엑세스 토큰을 발급하기 위해 사용한다. 액세스 토큰의 유효기간을 짧게, 리프레시  토큰의 유효기간을 길게 설정하는 것이 가장 베스트

 

  • 액세스 토큰:
    • 사용자의 요청을 인증하기 위해 사용된다.
    • 일반적으로 짧은 유효 기간(예: 5분 ~ 1시간)을 가진다.
    • 짧은 수명으로 인해 탈취되더라도 피해를 최소화할 수 있다.
  • 리프레시 토큰:
    • 클라이언트가 새로운 액세스 토큰을 요청할 때 사용된다.
    • 유효 기간이 길지만, 클라이언트에 저장하거나 서버에만 관리하여 안전성을 확보해야 한다.
     

출처:스프링부트3 백엔드 개발자 되기: 자바편 :::신선영

 

728x90