본문 바로가기

Dev/Spring Boot

Spring Boot - 스프링 시큐리티의 로그인 로직

728x90

 스프링 시큐리티는 이름부터 알 수 있듯 권한, 인증 등 보안의 관련된 스프링의 하위 프레임워크 입니다.

스프링 시큐리티는 비밀번호가 암호화되어 있지 않으면 아에 입구컷 해버리는 매우 깐깐한 녀석인데 그만큼 안전하게 사용자 보안을 지켜준다고 볼 수 있습니다.

 

스프링 시큐리티는 SecurityContextHorder라는 공간을 만듭니다. 이 공간에는 유저 정보가 들어갈 수 있는데 유저의 정보가 들어간 상태를 "세션" 이라고 합니다. 우리가 로그인시 보이는 화면과 비로그인시 보이는 화면이 다른 경우가 많은데 전부 세션이 유지되고 있냐, 안되어 있냐로 화면을 구분하여 보여주는 것입니다.

 

먼저 HTTP 통신으로 로그인 요청으로 아이디와 비밀번호가 들어올겁니다. 그럼 스프링 시큐리티가 이 로그인 명령을 가로챕니다. (물론 url 설정해야함)

그 후 2번에 보이는 UsernamePasswordAuthenticationToken 을 만듭니다. 

 

이 토큰은 AuthenticationManager에게 넘어가고 이 매니져는 UserDetailService 에게 이 사용자가 데이터베이스가 있는가? 라고 물어봅니다. 그럼 UserDetailService 는 데이터베이스에서 사용자와 맞는 아이디 비밀번호가 있는지 확인 후 매니져에게 값을 전달합니다.

여기서 true가 나오면 SecurityContextHorder에 유저정보..? 토큰? (여긴 정확하지 않은데 아마 Authentication임)을 삽입해주고 이를 세션이 생성되었다고 합니다.