스프링/스프링시큐리티

Spring Security

signal시노 2024. 10. 2. 17:31

Security 말 그대로 보안이 떠오를 것 이다.

Spring Security는 자바 웹 애플리케이션을 위한 강력하고 유연한 보안 프레임워크이다.

 

인증, 인가(권한), 암호화 등 사용자를 제한하고 관리한다.

 

예를 들어보자

사용자가 로그인을 했을 때 여러 부류의 사용자가 있을 것이다.

관리자, 일반 유저, 다른 형태의 유저라고 했을 때 그들의 아이디와 비밀번호를 입력하고 로그인 할 것이다.

 

Security는 사용자가 입력한 아이디와 비밀번호를 확인하여 로그인 작동을 한다.

사용자는 부여된 권한으로 제한적인 요청을 할 수 있다.

관리자만이 할 수 있는 요청을 일반 유저가 요청할 수 있으면 안되기 때문이다.

 

그렇다면 이 과정은 어떻게 이루어질까?

인증 프로세스

  1. 사용자 입력: 사용자가 로그인 양식에 사용자 이름과 비밀번호를 입력합니다.
  2. 인증 요청: 입력된 자격 증명을 기반으로 UsernamePasswordAuthenticationToken 객체를 생성하여 AuthenticationManager에 전달합니다.
  3. UserDetailsService 호출: AuthenticationManager는 UserDetailsService를 호출하여 데이터베이스에서 사용자의 정보를 로드합니다.
  4. 비밀번호 비교: AuthenticationProvider는 제공된 비밀번호와 데이터베이스에 저장된 비밀번호를 비교합니다. 이때 비밀번호는 해시 형태로 저장되므로 PasswordEncoder를 사용하여 비교합니다.
  5. 인증 결과:
    • 인증이 성공하면, Authentication 객체가 생성되어 SecurityContextHolder에 저장됩니다.
    • 인증이 실패하면 AuthenticationException이 발생하고, 이를 처리하는 로직이 실행됩니다.

Security의 어떤 버전이든 흐름은 동일하다.

구현 로직은 버전마다 다를 것이다.

글 작성 최신 버전 기준으로 SecurityFilterChain을 사용한다.

 

해당 메소드에서 권한에 따른 url 접근 제한, 로그인 동작 이후 리디랙션할 URL을 설정하고 bean을 설정해 스프링 컨테이너에 등록하고 외부 클래스에서 의존성을 주입하여 사용할 수 있다.

 

다양한 커스텀으로 인증과 권한을 설정할 수 있으며 역량에 따라 많은 기능들을 수행할 수 있다.

깊이있게 공부해보는 것이 좋을 것이다.