728x90

ServletFilter
- 사용자 요청 시 DelegatingFilterProxy 클래스가 요청을 받는다.
- DelegatingFilterProxy는 서블릿 필터로, 스프링의 기능을 사용하지 못하기 때문에 FilterChainProxy로 요청을 전달해 주는 역할만 한다.
- FilterChainProxy는 여러 개의 필터를 가지고 있고, 하나씩 호출하며 인증을 진행한다(Authentication)
Authentication
- 인증 필터에는 여러 종류가 있지만, 그 중 가장 많이 사용하는 UserPasswordAuthenticationFilter이다.
- UserPasswordAuthenticationFilter가 인증 요청을 받고(/login), Authentication 객체를 만들게 된다.
- Password, Id 와 같은 인증정보를 Authentication 객체에 넣어둔다.
- Authentication 객체를 만든 후, AuthenticationManager를 호출한다
- AuthenticationManager는 인증 처리를 할 수 있는 클래스(AuthenticationProvider)를 찾아 인증 처리를 위임하는 역할을 한다.
- AuthenticationProvider는 전달받은 Authentication을 확인해, ID/Password 정보를 가지고 온 뒤, 일치하는지 확인한다.
- AuthenticationProvider는 UserDetailService를 통해 DB에서 ID를 Query를 통해 질의를 하고, 반환받은 User 객체를 UserDetails 타입으로 변환해서 가지고 있는다.(ID 검증 완료)
- AuthenticationProvider는 PasswordEncoder를 이용해, 암호화된 Password와 DB에 저장된 Password를 비교하여 인증 처리를 진행한다(Password 검증 완료)
- 만약 둘 중 하나라도 실패하게 된다면 AuthenticationFilter까지 예외를 전달하여, 인증 실패 예외를 발생시킨다.
- AuthenticationProvider를 통해 인증이 성공한 User는 다시 UserDetails 정보를 가지고, Authentication 객체를 만들어 최종적으로 인증이 완료된 객체를 AuthenticationFilter에 전달을 하게 되고, AuthenticationFilter는 인증이 완료된 객체를 SecurityContext에 저장한다.
- SecurityContext는 인증을 받았다는 보증을 하고, 어디서나 해당 정보를 꺼내서 사용할 수 있다.
Authorization
- 인증은 완료가 되었지만, 권한이 있는지 확인이 필요하기 때문에 Authorization 체크를 해야한다(SecurityContext는 존재한다, 인증을 받았기 때문)
- ExceptionTranslationFilter에서 인증, 인가에서 예외가 발생했을 경우 해당 필터에서 이를 처리해준다.
- ExceptionTranslationFilter는 SecurityFilter 가장 마지막에 존재하는 FilterSecurityInterceptor에서 인가에 권한이 있는지 판단한다.
- FilterSecurityInterceptor는 AccessDecisionManager 클래스를 가지고 있고, AccessDecisionManager 클래스는 내부적으로 AccessDecisionVoter를 가지고 있다.
- AccessDecisionManager는 어떤 접근을 허용할지 말지 판단하는 클래스이고 AccessDecisionVoter는 현재 사용하는 자원이 접근 가능한지 투표해준다.
728x90
'스프링 시큐리티 OAuth2 > Spring Security Fundamentals' 카테고리의 다른 글
| CORS (0) | 2022.12.20 |
|---|---|
| HttpBasic 인증 (0) | 2022.12.18 |
| AuthenticationEntryPoint 이해 (0) | 2022.12.17 |
| 자동 설정에 의한 초기화 진행 (0) | 2022.12.11 |
| 초기화 과정 이해(SecurityBuilder / SecurityConfigurer) (0) | 2022.12.02 |