이 강의에서는
우리가 앞 강의에서 다룬
Spring Security 기본 동작의
시퀀스 플로우를
설명해보겠습니다
굉장히 짧을 건데
한 번 더 이 내용을
다루고 싶은 이유는
여러분에게 엄청나게 명확해서
여러분이 영원히 기억하게 하기 위해서입니다
그리고 동시에
우리가 지난 시간에 다룬
시퀀스 플로우가 나타난
별도의 슬라이드를 만들고 싶었는데
미래에
여러분이 인터뷰에 임하거나
Spring Security 프레임워크를
복습하고자 할 때마다
이 슬라이드를 잠깐 확인하면
복습에 도움이 될 겁니다
그럼 여기 보시다시피
이것들이 Spring Security 프레임워크 안의
모든 주요 구성 요소입니다
가장 왼쪽에
엔드 유저가 있고
다음에 Spring Security 필터가 있고
다음 ProviderManager가 있는데
인증 관리자의
구현체입니다
ProviderManager 다음에는
DaoAuthenticationProvider가 있는데
인증 제공자의
구현체입니다
이 인증 제공자는 내부적으로
UserDetailsManager 구현체와
PasswordEncoder의
도움을 받을 겁니다
첫 단계에서
엔드 유저는 API 경로에 접근하고자 합니다
유저는 API 경로가
보안인지 공개인지 모릅니다
2단계에서 엔드 유저에 의해
요청이 시작되면
Spring Security 필터는
인가 필터
DefaultLoginPageGenerating필터와 같이
요청을 가로막고
API 경로가 보안 API 경로라면
엔드 유저에게
자격 증명을 입력할
로그인 페이지를 표시할 겁니다
엔드 유저가 자격 증명을 입력하면
요청은 다시 필터에 의해 가로막히고
이번에 요청을
가로막을 필터는
UsernamePasswordAuthenticationFilter입니다
이 필터는 해당 요청으로부터
유저 네임과 비밀번호를 추출하고
UsernamePasswordAuthenticationToken 객체를 형성하는데
이것은 Authentication 인터페이스의
구현체입니다
그 다음 이 필터는
ProviderManager 내부의
Authenticate 메소드를 호출합니다
ProviderManager는
이 흐름에 적용 가능한
모든 인증 제공자를 특정하고자
시도할 것이고
내부의 Authenticate 메소드를 호출함으로써
모든 가능한 인증 제공자를 시도할 것입니다
이 기본 흐름에서
DaoAuthenticationProvider를 호출할 것이고
DaoAuthenticationProvider는 내부적으로
UserDetailsManager의 구현체인
InMemoryUserDetailsManager
클래스 내부에 있는
loadUserByUsername
메소드를 불러옵니다
애플리케이션 메모리에서
유저 정보를 불러온 다음
PasswordEncoder의 도움으로
비밀번호 일치 여부를 확인합니다
비밀번호가 일치한다면
DaoAuthenticationProvider는
인증 객체 내부의 모든 필수 정보를 채움으로써
ProviderManager에게
인증이 성공적이라는
응답을 전송합니다
그리고 ProviderManager는 인증이
성공적인지 아닌지 확인합니다
성공적이라면 Spring Security 필터에
같은 내용을 전달합니다
그렇지 않으면 계속해서 다른 가능한
인증 제공자들을 시도합니다
ProviderManager가 응답을
Spring Security 필터에 보내면
9단계에서 저의 프레임워크는
이 인증 정보를 보안 컨텍스트 객체
내부에 저장해 엔드 유저가
다른 보안 APA 경로를
호출 시도한다면
프레임워크가 자격 증명을 계속해서
요구하지 않도록 합니다
그 대신 세션과 보안 컨텍스트
내부에 저장하는
정보를 활용하게 됩니다
여기까지가 크게 봤을 때
우리가 다룬 시퀀스 흐름입니다
여러분이 이 부분을
아주 명확하게 이해해야 합니다
왜냐하면 프레임워크가 내부적으로
어떻게 돌아가는지 알기 전까지는
실제 운영 시나리오를
디버그할 수 없기 때문입니다
이 시퀀스 흐름이 너무 어설프다고 느낀다면
시퀀스 흐름이 하나 더 있는데
거기에는 관련된 필터, 인터페이스
클래스가 무엇인지
높은 수준의 정보가 들어있습니다
단계와 함께 이번 강의 또는
우리가 다뤘던 이전 강의를
참고하시면 됩니다
무엇을 참고할지는 여러분 선택입니다
물론 여기서는 3개의 중요 필터만
강조하고 있지만 Spring Security는 내부적으로
많은 필터가 있습니다
10개에서 15개의 필터가 있습니다
하지만 시간 관계상 모든 필터를
다루지는 않을 겁니다
그래도 Spring Security 안에서
중요한 역할을 하는 첫 번째 구성 요소는
필터라는 것을
아셨으면 좋겠습니다
이로써 Spring Security 내부 흐름에 대해
여러분이 아주 명확히 이해했다고 생각합니다
감사드리며 다음 강의에서 뵙겠습니다
수고하셨습니다