-
[스프링 시큐리티] 인증 여부 결정 주체(AuthenticationProvider)강의노트/스프링 시큐리티 2020. 9. 23. 21:57
AuthenticationProvider 인터페이스
- 스프링 시큐리티에서 기본으로 제공하는 구현체가 있고, 해당 인터페이스를 상속 받아서 커스텀하게 구현할 수도 있다.
authenticate
- 인증처리를 위한 실제적인 검증을 하는 함수
supports
- 인증을 처리할 수 있는 기준이 되는지 검사하는 함수
ID 검증
- UserDetailsService 인터페이스 구현체를 통해서 User 객체를 조회한다.
- 전달된 ID를 가지고 User 객체를 조회하고, User 객체가 존재한다면 UserDetails 타입으로 변환해서 AuthenticationProvider로 반환한다.
password 검증
- UserDetailsService에서 반환받은 UserDetails 객체에 있는 패스워드와 로그인 시 입력된 패스워드를 비교한다.
- 패스워드를 저장할 때는 일반적으로 PasswordEncoder를 통해 암호화해서 저장한다.
추가 검증
- 인증 검사가 완료되면 Authentication 객체를 생성하고 해당 객체에 UserDetails와 Authorities 정보를 넣어서 AuthenticationManager 객체로 전달한다.
코드 분석
AuthenticatonManager는 자신이 가지고 있는 AuthenticatonProvider 목록에서 해당 기능을 지원하는 AuthenticatonProvider를 찾고 해당 AuthenticatonProvider에 인증 처리를 위임한다.
FormLogin 인증의 경우 DaoAuthenticationProvider가 인증 처리를 진행한다.
UserDetailsService를 통해서 UserDetails 정보를 조회한다.
UserDetails가 존재한다면 ID 검증을 통과하게 된다.
PasswordEncoder를 통해서 UserDetails 객체의 패스워드와 로그인 시 전달된 패스워드가 같은지 검증한다.
모든 검증이 완료 되면 Authentication 객체에 UserDetails와 권한 정보를 담아서 AuthenticationManager에게 다시 반환한다.
'강의노트 > 스프링 시큐리티' 카테고리의 다른 글
[스프링 시큐리티] 자원 접근 허용 여부 결정 주체 (AccessDecisionManager, AccessDecisionVoter) (0) 2020.10.07 [스프링 시큐리티] 자원 접근 허용 여부 검증(Authorization, FilterSecurityInterceptor) (0) 2020.09.23 [스프링 스큐리티] 인증 여부 검증(AuthenticationManager) (0) 2020.09.14 [스프링 시큐리티] Authentication Flow (0) 2020.09.14 [스프링 시큐리티] SecurityContext 객체 생성, 저장, 조회(SecurityContextPersistenceFilter) (0) 2020.09.14