Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
서비스 인증과 권한 부여
인증과 인가
- 인증: 사용자가 누구인지 확인하는 단계 ex) 로그인
- 로그인 시 토큰 발급 → 서비스 사용시 서버에 토큰 전달하여 사용자 인증
- 로그인 실패 시 토큰을 전달받지 못해 접근 불가
- 인가: 사용자가 리소스에 접근할 때 접근할 권리가 있는지 확인하는 과정
- ex) 사용자 등급 확인 후 접근 등급이 맞는 경우 게시판 접근 가능
스프링 시큐리티
애플리케이션의 인증, 인가 등의 보안 기능을 제공하는 스프링 하위 프로젝트
보안과 관련된 여러 기능을 제공한다.
동작 구조
서블릿 필터 기반으로 동작
- 클라이언트 요청
- 서블릿 컨테이너: URI 확인 후 필터와 서블릿 매핑
- 스프링 시큐리티: 사용하려는 필터 체인을 서블릿 컨테이너의 필터 사이에서 동작시킨다.
- DelegatingFilterProxy 사용
DelegatingFilterProxy 서블릿 컨테이너의 생명주기와 스프링 애플리케이션 컨텍스트 사이 다리역할을 수행하는 필터 구현체 - 표준 서블릿 필터 구현 - 내부에 필터체인 FilterChainProxy을 통해 역할 위임
FilterChainProxy - 스프링의 자동설정에 의해 자동 생성 - 보안 필터체인을 통해 많은 보안 필터 사용 가능 - 여러 보안 필터체인을 사용하기 위해 WebSecurityConfigureAdapter 클래스를 상속받아 설정 - 별도의 설정이 없을 경우 UsernamePasswordAuthenticationFilter를 통해 인증 처리
UsernamePasswordAuthenticationFilter 인증 과정
- 클라이언트 요청
- 서블릿 필터: SecurityFilterChain으로 위임
- 별도의 설정이 없는 경우 UsernamePasswordAuthenticationFilter에서 인증 처리
- AuthenticationFilter: 요청 객체에서 아이디와 password를 통해 토큰 생성
- 생성된 토큰 AuthenticationManger에 전달
- ProviderManger: 인증을 위해 토큰 정보를 userDetailService에 전달
- 생성된 UserDeatils객체를 AuthenticationProvider로 전달
- 해당 Provider에서 인증 수행
- 성공할 경우 ProviderManger로 권한을 담은 토큰 전달
- ProviderManger: 검증된 토큰 AuthenticationFilter로 전달 11: AuthenticationFilter: 검증된 토큰을 SecurityContextHolder의 SecurityContext에 저장