이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
Ajax 인증 - 흐름 및 개요
- Ajax 인증 또는 Form 인증 방식으로 처리할 때 스프링 시큐리티의 전반적인 처리 과정은 비슷하다.
- 동일하게 필터 기반으로 인증 처리를 진행한다.
- 필터가 사용하는 각각의 클래스의 역할의 차이는 존재하지만 전반적인 과정은 비슷하다.
- Form 인증 방식은 동기적 방식
- Ajax 인증은 비동기적 방식으로 동작한다.
참고
Ajax 인증은 비동기로 통신할 경우 필요한 인증이기 때문에 만약 Jsp와 같은 뷰에서 비동기적인 통신이 필요할 경우 Ajax 인증을 써야할 수도 있다.
예를 들어 2단계 인증을 구현할 경우 1단계에서는 Ajax 인증으로 처리하고 그 결과를 가지고 2단계에서는 Form 인증으로 처리하는 식으로 구현 가능하다.
반대로 React나 Vue로 구현된 페이지라 할지라도 비동기 통신방식의 인증이 아닐 경우 Form 인증으로 처리해야 할 수도 있다.
다만 React와 같은 프론트 모듈을 통해 구현할 경우 페이지 렌더링이 아닌 Json 형식으로 데이터를 처리하기 때문에 Ajax 방식의 인증이 되어야 한다.
(Rest 방식으로 http 통신하는 서비스에서 ajax 기술 사용)
결과적으로 Ajax 방식과 Form 방식의 구현은 특별히 정해진 기준이나 규칙이 존재하지 않는다.
어떤 통신방식으로 인증이 이루어지냐에 따라 자유롭게 선택하면 된다.
흐름
인증 처리
- 스프링 시큐리티는 인증/인가 처리에 필터 기반으로 동작한다.
- 필터를 통해 각각의 클래스에게 인증 처리를 부여한다.
- AjaxAuthenticationFilter를 생성한다.
- 인증 객체(AjaxAuthenticationToken)에 사용자 인증 처리를 위한 정보를 담는다.
- 필터는 인증관리자(AuthenticationManager)에게 생성한 인증 객체(AjaxAuthenticationToken)를 전달한다.
- AuthenticationManager는 AjaxAuthenticationProvider에게 실질적인 인증 처리를 위임한다.
- 이러한 과정은 앞서 공부했던 Form 인증 방식과 유사하다.
- AuthenticationSuccessHandler와 AuthenticationFailureHandler 인터페이스를 구현한 구현체를 생성해 설정 파일에 등록한 뒤 인증에 성공하거나 실패하면 스프링 시큐리티는 해당 내용으로 처리를 진행한다.
인가 처리
- 인증에 성공한 사용자가 특정 자원에 접근하면 인가 처리가 수행된다.
- FilterSecurityInterceptor 클래스가 인가 처리를 담당한다.
- 인가 처리를 수행하다 인증 예외 혹은 인가 예외가 발생하면 ExceptionTranslationFilter에게 전달한다.
- 인증이 실패했을 경우
- AjaxUrlAuthenticationEntryPoint 작업을 수행한다. (보통 로그인 페이지로 이동)
- 자원 접근이 거부되었을 경우
- AjaxAccessDeniedHandler 작업을 수행한다.
- 인증이 실패했을 경우
- 인가 처리를 수행하다 인증 예외 혹은 인가 예외가 발생하면 ExceptionTranslationFilter에게 전달한다.
'스프링 시큐리티 > 실전프로젝트 - 인증 프로세스 Ajax 인증 구현' 카테고리의 다른 글
AjaxCustomDSLs구현하기 (0) | 2023.02.14 |
---|---|
인증 및 인가 예외 처리 - AjaxLoginUrlAuthenticationEntryPoint, AjaxAccessDeniedHandler (0) | 2023.02.14 |
인증 핸들러 - AjaxAuthenticationSuccessHandler, AjaxAuthenticationFailureHandler (0) | 2023.02.14 |
인증 처리자 - AjaxAuthenticationProvider (0) | 2023.02.14 |
인증 필터 - AjaxAuthenticationFilter (0) | 2023.02.13 |