IT/SpringBoot

[SpringBoot] Security & Jwt 개념 보충

j8970 2025. 5. 14. 12:50

Spring Security & JWT 정리

스프링 부트 기반 프로젝트에서 필수적인 보안 요소인 Spring Security와 **JWT(JSON Web Token)**에 대해 핵심 개념과 구조


📌 Spring Security (스프링 시큐리티)

🔷 정의

  • Spring Framework 기반의 보안 프레임워크로, 인증(Authentication), 인가(Authorization), 권한(Role) 관리를 담당함.

🔷 기능

  • ✅ CSRF, 세션 고정 공격 등의 보안 위협 방지
  • ✅ 요청 헤더 기반의 보안 처리 가능
  • ✅ 다양한 필터 기반의 구조

🔷 기본 용어 설명

  • 인증(Authentication): 사용자가 누구인지 확인하는 과정
    • 예: 로그인 시 ID와 비밀번호를 통한 사용자 확인
  • 인가(Authorization): 인증된 사용자가 접근 가능한 권한이 있는지 확인
    • 예: 관리자만 특정 페이지 접근 가능

📌 Spring Security 구조

🔷 동작 원리

  • 스프링 시큐리티는 Filter Chain을 기반으로 동작하며, 인증 및 인가 과정에서 여러 필터가 순차적으로 실행됨.

🔷 중요 필터 구성

  • SecurityContextPersistenceFilter
  • LogoutFilter
  • UsernamePasswordAuthenticationFilter
    • 아이디/비밀번호 인증 처리
    • 로그인 성공 → AuthenticationSuccessHandler
    • 로그인 실패 → AuthenticationFailureHandler
  • DefaultLoginPageGeneratingFilter
  • BasicAuthenticationFilter
  • RequestCacheAwareFilter
  • SecurityContextHolderAwareRequestFilter
  • AnonymousAuthenticationFilter
  • SessionManagementFilter
  • ExceptionTranslationFilter
  • FilterSecurityInterceptor
    • 인가 관련 처리, 접근 제어 판단

📌 인증(로그인) 처리 절차

✅ 순서 요약:

  1. HTTP 요청: 사용자가 로그인 정보 전송 (ID/PW)
  2. Authentication Filter 작동: ID/PW 유효성 검사
  3. UsernamePasswordAuthenticationToken 생성
  4. AuthenticationManagerAuthenticationProvider 전달
  5. UserDetailsService를 통해 사용자 정보 조회
  6. DB 정보와 일치하면 인증 성공
  7. SecurityContextHolder에 인증 정보 저장

📌 JWT (JSON Web Token)

🔷 정의

  • 사용자의 인증 정보를 안전하게 JSON 형식으로 토큰 기반 인증 방식으로 전달하는 기술
  • 서버가 사용자 인증 후 클라이언트에게 JWT를 발급하고, 이후 서버는 토큰만을 통해 인증 상태를 유지

🔷 특징

  • Stateless (무상태성): 서버에 세션 저장 없이 클라이언트가 토큰을 보관
  • 인증(Authentication): 로그인 후 JWT 발급
  • 인가(Authorization): JWT 내 권한 정보 기반으로 접근 제어

🔷 전달 방식

  • HTTP 요청의 Authorization 헤더에 아래 형식으로 전달:
Authorization: Bearer <JWT 토큰>

📌 JWT 구조

JWT는 총 3가지 구성 요소로 나뉘며 .으로 구분된다

[Header].[Payload].[Signature]

✅ 1. Header (헤더)

  • 토큰 타입 (typ)과 해싱 알고리즘 (alg) 정보 포함

✅ 2. Payload (내용)

  • 사용자 정보, 권한 정보 등 클레임(claim) 포함
  • Base64 인코딩 처리 (암호화 X → 민감한 정보 저장 금지)

✅ 3. Signature (서명)

  • Header + Payload 조합에 서버 비밀 키로 서명한 값

📌 Bearer Token

🔷 정의

  • OAuth 2.0 인증 방식 중 하나로, API 요청 시 서버에 인증된 사용자임을 증명하는 토큰

🔷 특징

  • ✅ 토큰을 "소지"한 자가 인증된 사용자로 간주됨
  • ✅ 서버가 별도로 세션을 관리하지 않음

✅ 마무리 정리

항목 설명
Spring Security 인증과 인가를 담당하는 스프링 보안 프레임워크
JWT 무상태 인증 방식의 토큰 시스템
필터 구조 UsernamePasswordAuthenticationFilter → FilterSecurityInterceptor 등 순차적 처리
주요 개념 인증, 인가, Bearer Token, Stateless