상세 컨텐츠

본문 제목

JWT를 사용한 인증/인가의 장점과 한계점

스프링

by R4MeN 2024. 6. 3. 22:11

본문

장점

  1. 자체 포함(Self-contained)
    • JWT는 자체적으로 필요한 모든 정보를 포함하고 있어 별도의 데이터베이스 조회 없이도 토큰만으로 사용자 정보를 확인할 수 있음
  2. 확장성(Scalability)
    • 서버 간 상태를 공유할 필요가 없어, 여러 서버에 쉽게 확장 가능함
    • 특히 마이크로서비스 아키텍처에서 유용함
  3. 편리한 클라이언트 저장
    • 클라이언트 측에서 쉽게 저장하고 사용할 수 있음 (예: 로컬 스토리지, 세션 스토리지 등)
    • 쿠키를 사용하지 않으므로 CORS 문제를 피할 수 있음
  4. 표준화된 포맷
    • JWT는 RFC 7519에 정의된 표준으로, 다양한 플랫폼과 언어에서 쉽게 사용할 수 있음
    • JSON 형식이기 때문에 직관적이고 사용하기 쉬움
  5. 보안 기능
    • 토큰에 서명이 포함되어 있어, 토큰의 무결성을 검증할 수 있음
    • 암호화를 통해 토큰의 내용을 보호할 수 있음 (예: JWE - JSON Web Encryption)

한계점

  1. 토큰 길이 증가
    • JWT는 일반적으로 길이가 길어질 수 있으며, 이는 네트워크 오버헤드를 증가시킬 수 있음
    • 토큰이 너무 길어지면 HTTP 헤더의 크기 제한에 도달할 수 있음
  2. 취소 불가능성
    • JWT는 기본적으로 상태가 없는(stateless) 방식이므로, 한 번 발급된 토큰을 서버 측에서 쉽게 무효화할 수 없음
    • 이를 해결하기 위해서는 블랙리스트나 화이트리스트를 사용해야 함
  3. 만료 시간 설정의 어려움
    • 토큰의 유효 기간을 적절하게 설정하는 것이 어려울 수 있음
    • 너무 짧으면 자주 재로그인이 필요하고, 너무 길면 보안 위험이 증가함
  4. 페이로드 노출 위험
    • JWT는 기본적으로 Base64Url로 인코딩되어 있어, 누구나 페이로드를 디코딩할 수 있음
    • 민감한 정보를 포함시키지 않도록 주의해야 함
  5. 서명 키 관리
    • JWT의 서명 키가 노출되면 토큰을 위조할 수 있음
    • 키 관리와 보호가 매우 중요함

결론

JWT를 사용한 인증/인가는 자체 포함된 토큰을 통해 확장성과 편리성을 제공하지만, 토큰 관리와 보안 측면에서 주의가 필요함. 각 장점과 한계점을 고려하여 적절한 보안 정책과 토큰 관리 전략을 수립하는 것이 중요함.

'스프링' 카테고리의 다른 글

Logout API  (0) 2024.06.07
CascadeType  (0) 2024.06.07
IoC(제어의 역전)와 DI(의존성 주입)  (0) 2024.05.31
p6spy-spring-boot-starter 라이브러리  (1) 2024.05.23
스프링 3 Layer Architecture  (0) 2024.05.22

관련글 더보기