[Spring] 스프링 시큐리티 Authentication

Authentication

스프링 시큐리티의 로그인 과정에선 Authentication의 생성이 필요하다.

전체 과정

1

스프링 시큐리티를 이용한 로그인의 전체적인 과정이다.(출처 - https://springbootdev.com/)

Http Request -> 요청

우선 Http Request의 Method 중 post 방식으로 로그인 요청을 날린다.
이때 로그인하고자 하는 사용자의 아이디(User name)와 비밀번호가 Post 방식으로 전달된다.

AuthenticationFilter

AuthenticationFilter가 Post 방식으로 날라온 요청을 받고 이 필터가 아이디와 패스워드를 가지고 토큰을 만든다.
이때 토큰을 UsernamePasswordAuthenticationToken이라고 하며, 이 토큰을 AuthenticationManager로 보내준다.

AuthenticationManager

UsernamePasswordAuthenticationToken을 가지고 AuthenticationManager가 Authentication 객체를 만들기 위해 토큰을 UserDetailsService로 보내준다.

UserDetailsService

UserDetailsService가 해당 아이디가 DB에 있는지의 여부를 확인해 준다.

이때, 패스워드는 인코딩 과정을 거쳐야 하므로 스프링이 따로 관리해야 하기 때문에 AuthenticationManager가 해준다.

Authentication 객체

이렇게 토큰의 두 값을 확인한 뒤 일치하면 세션에 Authentication으로 저장을 해준다.
Authentication 객체가 들어간 순간부터 세션 속 시큐리티 컨텍스트에 값이 들어간 상태이므로 필요한 곳에서 사용할 수 있다.