Spring security는 Spring 기반의 보안(인증+인가)를 담당하는 하위 프레임워크이다.
이때 인증,인가 부분들은 수많은 Filter흐름에 따라 진행된다.
기본적인 Architecture는 다음과 같다.
1.기본 용어 및 모듈:
- SecurityContext: Security정보 담을 Session
- Principal:접근 실제 주체
- Authentication:인증관련 정보들
- UserDetails: 접근주체와 관련된 인터페이스
2. 로그인(인증) 흐름을 요약하면 다음과 같다.
1. 로그인 요청
2. AuthenticationFilter에서 UsernamePasswordAuthenticationToken을 생성하여 AuthenticaionManager에게 전달
3. AuthenticaionManager는 등록된 AuthenticaionProvider(들)을 조회하여 인증을 요구함
4.AuthenticaionProvider는 UserDetailsService의 @loadByUserName을 실행시켜 입력받은 아이디에 대한 사용자 정보를 DB에서 조회함(실제 @Entity)
5. 입력받은 비밀번호를 암호화하여 DB의 비밀번호화 매칭되는 경우 인증이 성공된 UsernameAuthenticationToken을 생성하여 AuthenticaionManager로 반환함
6.AuthenticaionManager는 UsernameAuthenticaionToken을 AuthenticaionFilter로 전달함
7.AuthenticationFilter는 전달받은 UsernameAuthenticationToken을 LoginSuccessHandler로 전송하고, SecurityContextHolder에 저장함