Authentication이란?

스프링 시큐리티에서 Authentication은 사용자의 인증 정보를 나타내는 인터페이스이다. 스프링 시큐리티는 Authentication 객체를 만들고, 이를 보유하고, 인증 정보를 검증하고, 사용자 인증 정보를 유지 관리하고, 사용자 권한을 부여하기 위해 사용된다. 이러한 인증 과정은 보안에 중요한 역할을 한다.  인증 시 id  password  담고 인증 검증을 위해 전달되어 사용 되며, 인증이 성공하면 사용자는 시스템에 대한 액세스 권한을 부여받고 SecurityContext 에 저장되어 전역적으로 참조가 가능하다

 Authentication 인터페이스의 구조는 아래와 같다.
principal : 사용자 아이디 혹은 User 객체를 저장
credentials : 사용자 비밀번호
authorities : 인증된 사용자의 권한 목록
details : 인증 부가 정보
Authenticated : 인증 여부

 


 

플로우

전체적이 플로우는 아래와 같다.

 

사용자가 username 과 password를 입력하면 UsernamePasswordAuthenticationFilter에서 request를 받는다.

 

 

UsernamePasswordAuthenticatrionFilter는 그정보로 Authentication객체를 생성한다. 이 객체가 인증에 이용된다.

 

 

AuthenticationManager가 Authentication객체를 받아 인증을 시도한다.

 

 

인증에 성공하면 최종적으로 동일한 타입으로  Authentication을 생성한다.

 

 

최종적으로 생성된 Authentication객체는 SecurityContextHolder > SecurityContext에
저장되고 인증객체를 전역적으로 사용이 가능하다.

 

 


 

 

코드로 이해하기

 

로그인을 시도한다.

 

 

UsernamePasswordAuthenticatrionFilter가 요청을 받아 (1) (2) 처럼 username 과 password를 추출해 (3) Authentication 객체를 생성하고 (4)  AuthenticationManager 에게 인증요청을 한다.

 

AuthenticationManage는 인증에 성공하면  최종적으로 Authentication 객체를 만든다.

 

최종적으로 Authentication 객체는 SecurityContextHolder > SecurityContext에 저장되고 인증객체를 전역적으로 사용이 가능하다.

복사했습니다!