-
스프링 시큐리티 인증 절차Study/Spring 2022. 12. 21. 15:15반응형
스프링 시큐리티는 학원 프로젝트을 하면서 구현은 해봤으나,
실질적인 인증절차는 모르고 시큐리티기능을 가져다가 썼다.
이번기회에 시큐리티 인증 절차 정리겸 포스팅 해볼 예정
출처: https://velog.io/@bbamsoo/Spring-Security-%EC%B2%98%EB%A6%AC-%ED%9D%90%EB%A6%84
(1)사용자가 Form을 통해 로그인 정보를 입력하고 인증 요청을 보낸다.
(2)AuthenticationFilter(구현체 UsernamePasswordAuthenticationFilter)가 HttpServletRequest에서 사용자가 보낸 아이디와 패스워드를 인터셉트 하여 유효성을 검사한다.
유효성 검사를 끝내고 HttpServletRequest에서 꺼내온 사용자 아이디와 패스워드를 인증 처리부분 총괄하는 매니저 역할을 하는 AuthenticationManager 인터페이스(구현체 ProviderManager)에게
인증용 객체인 임시 Authentication객체 (UsernamePasswordAuthenticationToken)를 만들어 위임한다.
(3~4)AuthenticationManager 인터페이스(구현체 ProviderManager)는
임시 Authentication객체 (UsernamePasswordAuthenticationToken)를 전달 받아 실질적인 인증부분을 담당하는AuthenticationProvider에게 임시 인증용 객체인 Authentication객체 (UsernamePasswordAuthenticationToken)를 넘긴다.
(5) AuthenticationProvider에서 접속한 사용자와 DB의 사용자가 맞는지 아닌지 실질적인 인증 작업이 이루어 지는 곳인데, AuthenticationProvider는 먼저 UserDetailsService 에게 DB에서 사용자가 로그인요청한 정보가 있는지 가져오도록 지시함
(6)지시를 받은 UserDetailsService는 DB에서 사용자의 로그인정보와 동일한 정보를 찾아 UserDetails 객체(유져객체를 담는 VO와 같은 기능)에 담는다
(7) DB에서 사용자의 로그인정보를 담아온 UserDetails 객체(유져객체를 담는 VO와 같은 기능)를 실질적인 인증부분을 담당하는AuthenticationProvider에게 전달을 하고 이곳에서 PasswordEncoder를 이용하여 UserDetails객체에 담긴 암호화 된 Password와 인증을 위한 임시 Authentication객체 안에 포함된 Password가 일치하는지 검증한다.
-검증에 성공하면 UserDetails를 이용하여 진짜!!!Authentication 객체를 생성
-검증에 실패하면 예외를 발생시키고 인증처리를 중단 시킨다.
(8)진짜!!!Authentication 객체 AuthenticationManager 에게 전달한다
-이때 진짜!!!Authentication 객체에는 성공한 사용자의 정보 (Principal, Credential, GrantedAuthorities)를 가지고 있다.
(9)진짜!!!Authentication 객체는 AuthenticationFilter(구현체 UsernamePasswordAuthenticationFilter)로 전달 한다.
(10)SecurityContextHolder를 이용해 SecurityContext에 인증된 진짜!!!Authentication 객체을 저장한다.
-이후에 Spring Security의 Session정책에 따라서 HttpSession에 저장되어 사용자의 인증 상태를 유지하기도 하고, 무상태를 유지하기도 한다.
반응형'Study > Spring' 카테고리의 다른 글
초보자를 위한 Ajax통신으로 메뉴불러오기_(1) (1) 2023.03.07 초보자를 위한 AJAX통신으로 회원가입기능 간단히 만들기 (0) 2023.01.03 AJAX 너는 뭐니? 도대체!!! (0) 2022.12.22 초보자를 위한 스프링 시큐리티 커스텀 구현하기(UserDetails, UserDetailsService, AuthenticationProvider customizing 하기) (0) 2022.12.21 전자정부프레임워크 Maven 설정파일(Spring Maven,pom.xml,web.xml, dispatcher-servlet.xml .... ) (0) 2022.12.06