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
- 인가 관련 처리, 접근 제어 판단
📌 인증(로그인) 처리 절차
✅ 순서 요약:
- HTTP 요청: 사용자가 로그인 정보 전송 (ID/PW)
- Authentication Filter 작동: ID/PW 유효성 검사
UsernamePasswordAuthenticationToken
생성AuthenticationManager
→AuthenticationProvider
전달UserDetailsService
를 통해 사용자 정보 조회- DB 정보와 일치하면 인증 성공
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 |