본문 바로가기

Spring Security

[Spring Security] Security Session

인증

사용자의 신원을 검증하는 행위 ex) 로그인

 

인가

사용자에게 특정 리소스나 기능에 액세스할 수 있는 권한을 부여하는 행위 ex) USER, MANAGER, ADMIN..

 

사용이유

Http 프로토콜은 기본적으로 Stateless한 특징을 지니고있어 서버 디자인이 간편합니다.
하지만 Stateless 하기에 사용자에게 매번 인증에 관한 절차를 묻게됩니다.
이를 위해 Cookie나 Session을 사용해서 사용자의 불편함을 덜어줍니다.

 

Spring Security

Spring Security란 Spring기반의 어플리케이션의 인증과 인가를 담당하는 프레임워크입니다.
Spring Security는 Filter 기반으로 동작하기 때문에 Spring MVC와 분리되어 관리할 수 있고, Session-Cookie기반으로 동작합니다.
또한 모든 요청에 대해 AuthenticationFilter 가 인증 및 권한 부여과정을 거친 후 Dispatcher Servlet으로 요청을 넘깁니다.
다음은 Spring Security의 구조입니다.

 

 

 

 

동작방식을 다음과 같습니다.

 

1. 사용자가 로그인을 시도합니다. (Http Request)

2. Request는 AuthenticationFilter에 도달하게 되고, 이는 UsernamePasswordAuthenticationFilter에 (username, password)를 보내게 됩니다.

3. UsernamePasswordAuthenticationFilter에 도착하면 해당 클래스의 attempAuthentication가 동작하고 그 메서드에서 사용자 자격 증명을 기반으로한 UsernamePasswordAuthenticationToken을 생성합니다.

4. 이어서 UsernamePasswordAuthenticationToken을 가지고 AuthenticationManager에게 인증을 진행하도록 위임합니다. (실제로는 AuthenticationManger 인터페이스를 구현한 ProviderManager)

5. AuthenticationProvider의 목록으로 인증을 시도합니다.

6. UserDetailService는 username기반의 UserDetails를 검색합니다.

7. UserDetails를 이용해서 User 객체에 대한 정보를 검색합니다.
        
8. User 객체의 정보를 UserDetails가 UserDetailsService에 전달함니다.
        
9. 사용자의 인증이 성공하면 전체 인증정보를 리턴하고, 아니라면 AuthenticationException을 던집니다.
        
10. AuthenicationManager가 인증객체를 Authentication Filter에 반환합니다.
        
11. SecurityContext에 인증객체를 설정하고 마무리가 됩니다.

 

 

Security Session의 단점

 

1. 대용량 트래픽에 대비한 scale-out이 어렵다. (세션 불일치문제)
2. Session기반이기 떄문에 서버에 과부화가 올 수 있다.

 

 

비밀번호

 

일반적으로 DB에 비밀번호가 직접적으로 노출되면 안됩니다.
따라서 Request로 넘어온 비밀번호는 해시함수를 이용해 암호화 후 모든 작업을 수행합니다.
해당 암호화는 BCryptPasswordEncoder를 통해 수행합니다.

 

 

 

 

'Spring Security' 카테고리의 다른 글

[Spring Security] OAuth  (0) 2023.02.13
[Spring Security] 보안 알고리즘  (2) 2023.01.23
[Spring Security] Cors  (0) 2023.01.15