AuthenticationProvider

나무·2024년 5월 8일

스프링 시큐리티

목록 보기
4/8
post-thumbnail

1. AuthenticationProvider 란?

AuthenticationProvider

인증 프로세스에서 사용자가 제공한 인증 정보(ex. password) 가 유효한지 안 한지 검증하는 객체이다.

  • 다양한 유형의 인증 메커니즘을 지원하며 대표적으로 UsernamePassword인증, 토큰 기반 인증, 지문 인식 등을 처리할 수 있다.
  • AuthenticationManager 에 의해 위에 언급한 기능들을 수행하도록 기능을 위임 받는다.
  • 다양한 인증 방식을 처리하기 위해 각각 다른 구현체 여러개가 정의되고 사용 될 수 있다. AuthenticationManager 가 적절한 provider 들을 골라서 위임한다.
  • 인증 로직을 수행한다음 성공적으로 완료되었다면 Authentication 객체를 AuthenticationManager 에게 반환한다.

2. AuthenticationProvider 구성

  • authenticate()
    AuthenticationManager 로 부터 Authentication 객체를 전달 받아 인증을 수행한다.

  • supports()
    인증을 수행할 수 있는 조건인지를 검사한다.

3. AuthenticationProvider 흐름

1) AuthenticationManager 가 인증을 수행하기 위해 적절한 AuthenticationProvider 를 선택한뒤 호출한다.

2) AuthenticationManager 로 부터 Authentication 객체를 전달 받은 AuthenticationProvider 는 인증을 수행하기 시작한다.

3) 대표적으로 사용자 유무, 비밀번호 검증, 보안 강화 처리 등을 수행하게 된다.
(사용자정보를 DB로부터 가져오기 위해 UserDetailsService 를 사용한다. )

4) 인증이 성공적으로 완료되었으면 Authentication 객체를 반환한다. 이때 해당 객체에는 사용자의 신원 정보와 인증된 자격 증명이 포함된다.

※ 실패시 AuthenticationException 예외를 발생시킨다.

3. AuthenticationProvider 구현체

DaoAuthenticationProvider

스프링 시큐리티가 기본으로 제공하며 대표적인 AutheticationProvider 구현체이다.

  • PasswordEncoderUserDetailsService 를 사용한다.
  • AbstractUserDetailsAuthenticationProvider 를 상속 받는다.

SpringSecurity 공식 가이드 문서에서 제공하는 DaoAuthenticationProvider 흐름도인데 앞에서 살펴본 AuthenticationProvider 의 흐름도와 거의 동일한 것을 확인할 수 있다.

주요 메서드들

retrieveUser()

사용자가 제출한 인증 정보를 검증하기 위해 DB에 저장된 사용자 정보를 불러오는 메서드이다. 여기서 UserDetailsServiceloadByUsername() 호출하여 UserDetails 를 불러온다.

additionalAuthenticationChecks()

사용자가 제출한 비밀번호와 DB에서 조회해온 비밀번호를 서로 비교하는 메서드이다.

엇 그건 authenticate() 에서 처리해야하는거 아니야?

라고 생각할 수 있는데 사실 additionalAuthenticationChecks()authenticate() 안에서 처리 된다.

위에서 살짝 언급했듯이 DaoAuthenticationProviderAbstractUserDetailsAuthenticationProvider 를 상속 받고 있는데, 부모 측 에서 authenticate() 가 어느정도 정의 되어 있으며 자식 프로바이더는 이 authenticate() 안에 호출 되는 템플릿 메서드(추상메서드이다) additionalAuthenticationChecks() 를 구현하고있다.

  • DaoAuthenticationProvider


  • AbstractUserDetailsAuthenticationProvider

4. AuthenticationProvider 커스터마이징

커스텀 구현

주석과 위 흐름도를 같이 보면서 코드를 읽으면 이해하기 쉬울 것이다.

본 포스트는
스프링 시큐리티 완전 정복 6.x 개정판 ,
스프링시큐리티6 공식 가이드 를 보고 정리했습니다.

profile
🍀 개발을 통해 지속 가능한 미래를 만드는데 기여하고 싶습니다 🍀

0개의 댓글