728x90
반응형
SMALL
스프링 시큐리티는 기본적으로 인증(Authentication)과 권한부여(Authorization)에 대한 지원을 제공합니다. 인증이란 사용자가 누구인지 확인하는 과정을 말하며, 권한부여는 인증된 사용자가 어떤 자원에 접근할 수 있는지를 결정하는 과정입니다.
- 인증(Authentication)
- 사용자가 자신이 누구라고 주장하는지 확인하는 과정입니다. 이는 일반적으로 아이디와 비밀번호를 이용해 수행됩니다. 스프링 시큐리티는 'AuthenticationManager'를 통해 이 과정을 처리합니다. 이 인터페이스에는 authenticate 메서드가 정의되어 있으며, 이 메서드를 이용하여 인증을 수행합니다.
- 권한부여(Authorization)
- 인증된 사용자가 어떤 자원에 접근할 수 있는지를 결정하는 과정입니다. 스프링 시큐리티는 'AccessDecisionManager'를 통해 이 과정을 처리합니다. 사용자가 특정 자원에 접근하려 할 때, AccessDecisionManager는 해당 사용자에게 필요한 권한을 결정하고, 그에 따라 접근을 허용하거나 거부합니다.
스프링 시큐리티는 이외에도 다양한 보안 관련 기능을 제공합니다. 예를 들어, 세션 관리, 비밀번호 인코딩, CSRF (Cross-Site Request Forgery) 방지 기능 등이 있습니다.
Spring Security를 활용한 인증 및 권한 관리의 전반적인 프로세스는 다음과 같은 단계로 이루어집니다:
- 설정 및 초기화:
- 의존성 추가: pom.xml 또는 build.gradle 파일에 Spring Security 관련 의존성을 추가합니다.
- Security Configuration 클래스 작성: @EnableWebSecurity 어노테이션을 사용하여 Spring Security 설정을 구성하는 클래스(SecureConfig)를 작성합니다. 이 클래스에서 인증 및 권한 부여 규칙을 정의합니다.
- 인증(Authentication):
- UserDetailsService 구현: 사용자 정보를 로드하는 UserDetailsService 인터페이스를 구현합니다. 이 인터페이스는 사용자 이름(username)을 기준으로 사용자를 로드하며, UserDetails 객체를 반환합니다.
- PasswordEncoder 설정: 비밀번호를 안전하게 저장하고 비교하기 위해 PasswordEncoder를 설정합니다. 보통 BCryptPasswordEncoder를 사용합니다.
- AuthenticationManager 설정: 인증 매니저는 UserDetailsService와 PasswordEncoder를 사용하여 인증을 수행합니다. 기본적으로 AuthenticationManagerBuilder를 사용하여 설정합니다.
- 권한 부여(Authorization):
- HttpSecurity 설정: configure(HttpSecurity http) 메서드를 통해 URL 경로에 대한 접근 권한을 설정합니다. 여기서 antMatchers 메서드를 사용하여 특정 경로에 대해 역할 기반 접근 제어를 설정합니다.
- 메서드 수준 보안: @PreAuthorize, @Secured 등의 어노테이션을 사용하여 메서드 수준에서 접근 제어를 설정할 수 있습니다.
- 필터 및 인터셉터:
- 필터 체인 설정: Spring Security는 요청이 들어올 때마다 여러 필터를 통해 요청을 검사합니다. 주요 필터로는 UsernamePasswordAuthenticationFilter, BasicAuthenticationFilter 등이 있습니다.
- Custom Filters: 필요에 따라 커스텀 필터를 구현하고, addFilterBefore, addFilterAfter 등의 메서드를 사용하여 필터 체인에 추가할 수 있습니다.
- 인증 및 권한 정보 저장:
- SecurityContext: 인증된 사용자 정보는 SecurityContextHolder에 저장됩니다. 이를 통해 애플리케이션 전반에서 인증된 사용자 정보를 사용할 수 있습니다.
- Session Management: 세션 관리를 통해 사용자의 로그인 상태를 유지합니다. Spring Security는 기본적으로 세션을 사용하지만, JWT와 같은 토큰 기반 인증도 설정할 수 있습니다.
- 예외 처리:
- Exception Handling: 인증 실패나 권한 부여 실패 시 처리할 예외 핸들러를 설정합니다. AuthenticationEntryPoint와 AccessDeniedHandler를 구현하여 커스텀 예외 처리를 할 수 있습니다.
728x90
반응형
LIST
'spring' 카테고리의 다른 글
@Transactional 어노테이션: 그것이 무엇인가, 그리고 어떻게 작동하는가 (0) | 2023.06.05 |
---|---|
Spring WebFlux와 멀티스레딩: 왜 나는 멀티스레딩을 선택했는가 (0) | 2023.06.05 |
DispatcherServlet 이란? (0) | 2023.05.29 |
Aspect-Oriented Programming (AOP): 개념, 장점, 그리고 위빙 (0) | 2023.05.29 |
SpringBoot에서 의존성 주입(Dependency Injection, DI)을 이해하기 (0) | 2023.05.21 |