Spring Boot (26) 서비스의 인증과 권한 부여

넙데데맨·2022년 11월 18일
0

보안 용어의 이해

인증

사용자가 누구인지 확인하는 단계
인증의 예로는 로그인이 있다.
DB에 등록된 번호와 비교해 일치 여부를 파악한 뒤 일치할 시 토큰을 전달한다.

인가

인증을 통해 검증된 사용자가 내부 리소스에 접근 시 권리가 있는지를 확인하는 과정

  • 게시판 접근 등급

접근 주체

애플리케이션의 기능을 사용하는 주체
사용자가 될 수도 디바이스, 시스템이 될 수도 있다.

애플리케이션은 인증을 통해 접근 주체가 신뢰할 수 있는지
인가를 통해 접근 주체에게 부여된 권한을 확인하는 과정을 거친다.

스프링 시큐리티

애플리케이션의 인증, 인가 등의 보안 기능을 제공하는 스프링 하위 프로젝트

동작 구조

클라이언트 - 필터체인(필터, 서블릿으로 구성) - Dispatcher Servlet
Servlet 필터를 기반으로 동작
1. 클라이언트가 애플리케이션으로 요청을 보냄
2. 서블릿 컨테이너는 URI를 확인해 필터와 서블릿을 매핑
3. 필터체인 내부의 DelegatingFilterProxy가 역할을 위임할 필터체인 프록시를 내부에 가지고 있으며 이를 이용해 스프링 시큐리티에서 제공하는 보안 필터체인을 사용할 수 있다.

각 필터마다 실행 순서가 다르며 많은 필터가 있다.
WebSecurityConfigurerAdpater 클래스를 상속 받아 보안 필터체인을 설정할 수 있다.
이를 통해 보안 필터체인을 여러개 만들었을 시 @Order 어노테이션을 통해 우선순위를 지정해 주어야한다.

보통 스프링 시큐리티에서는 보안 필터체인에서 UsernamePasswordAuthenticationFilter를 통해 인증을 처리 한다.

인증 처리 과정


1. 서블릿 필터에서 SecurityFilterChain으로 작업 위임 후 AuthenticationFilter(UsernamePasswordaAuthenticationFilter)에서 인증을 처리한다.
2. AuthenticationFilter는 request 객체에서 username, password를 추출해서 토큰 생성
3. AuthenticationManager(인터페이스로 구현체로는 ProviderManager가 있다.)에 생성한 토큰 전달
4. AuthenticationProvider로 토큰 전달
5. AuthenticationProvider는 토큰의 정보를 UserDetailService로 전달
6. UserDetailService는 DB에서 일치하는 사용자를 찾아 UserDetails 객체를 생성
7,8. UserDetails 객체 AuthenticationProvider로 전달되며 인증을 수행하고 성공할 시 AuthenticationManager로 권한을 담은 토큰을 전달
9. AuthenticationManager가 검증된 토큰을 AuthenticationFilter로 전달.
10. AuthenticationFilter는 검증된 토큰을 SecurityContextHolder에 있는 SecurityContext에 저장한다.

profile
차근차근

0개의 댓글