-
[Java Spring] Spring Security의 개념 및 처리 과정Programming/Java 2023. 1. 24. 17:00반응형
들어가기에 앞서
인증(Authentication)과 인가(Authorization)
- 인증(Authentication) : 해당 사용자가 본인이 맞는지 확인하는 과정
- 인가(Authorization) : 해당 사용자가 요청하는 자원을 실행할 수 있는 권한이 있는가를 확인하는 과정
➡️ Spring Security는 인증 절차를 거친 후 인가 절차를 진행
➡️ Principal을 아이디로 Credential을 비밀번호로 사용하는 Credential 기반 인증 방식 사용
- Principal(접근 주체) : 보호 받는 Resource에 접근하는 대상
- Credential(비밀번호) : Resource에 접근하는 대상의 비밀번호
Spring Security란?
: Spring 기반의 어플리케이션 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크
- 인증과 권한에 대한 부분을 Filter 흐름에 따라 처리
Client(request) → Filter → DispatcherServlet → Interceptor → Controller
Spring Security Architecture
1. 사용자가 로그인 정보와 함께 인증 요청 (Http Request)
2. AuthenticationFilter가 요청을 가로채고 가로챈 요청을 통해 UsernamePasswordAuthenticationToken의 인증용 객체 생성
- UsernamePasswordAuthenticationToken은 Authentication을 implements한 AbstractAuthenticationToken의 하위클래스
- User의 ID가 Principal, Password가 Credential 역할을 함
- UsernamePasswordAuthenticationToken의 첫 번째 생성자는 인증 전의 객체를 생성, 두 번째는 인증 완료된 객체를 생성3. AuthenticationManager의 구현체인 ProviderManager에게 생성한 UsernamePasswordToken 객체 전달
- 인증에 대한 부분은 AuthenticationManager을 통해서 처리(실질적으로는 AuthenticationManager에 등록된 AuthenticationProvider에 의해 처리)
- 인증에 성공하면 두 번째 생성자를 이용해 객체를 생성하여 Security Context에 저장4. AuthenticationManager는 등록된 AuthenticationProvider을 조회하여 인증 요구
- AuthenticationProvider에서는 실제 인증에 대한 부분을 처리
- 인증 전의 Authentication 객체를 받아서 인증이 완료된 객체를 반환하는 역할5. 실제 DB에서 사용자 인증 정보를 가져오는 UserDetailService에게 사용자 정보를 넘겨줌
- UserDetailService는 UserDetails객체를 반환하는 하나의 메소드만을 가지고 있음
- 일반적으로 이를 상속 받은 클래스에 UserRepository를 주입 받아 DB와 연결 처리6. 넘겨 받은 사용자 정보를 통해 DB에서 찾은 사용자 정보인 UserDetails 객체를 만듦
- 인증에 성공하여 생성된 UserDetails 객체는 Authentication 객체를 구현한 UsernamePasswordAuthenticationToken을 생성하기 위해 사용
7. AuthenticationProvider은 UserDetails를 넘겨받고 사용자 정보를 비교
8. 인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체 반환
- 현재 접근하는 주체의 정보와 권한을 담은 인터페이스
9. 다시 최초의 AuthenticationFilter에 Authentication 객체 반환
10. Authentication 객체를 SecurityContext에 저장
- Authentication 객체는 SecurityContext에 저장되며 SecurityContextHolder를 통해 SecurityContext에 접근하고 SecurityContext를 통해 Authentication에 접근 가능
반응형'Programming > Java' 카테고리의 다른 글
[Java Collection Framework] 2. 컬렉션(Collection), 리스트(List), ArrayList, LinkedList, Vector (0) 2023.03.07 [Java Collection Framework] 1. 컬렉션 프레임워크란? (0) 2023.02.11 [Java Spring] AOP 개념 및 사용 방법(AspectJ, xml, annotation) (0) 2022.10.30 [Java Spring] IoC, DI (의존성 주입 방법 xml, annotation) (0) 2022.10.30 [Java Spring] 스프링의 MVC 구조 (0) 2022.10.21