728x90
반응형
Spring Security 과정에 대해 공부
Spring Security는 Spring과는 별개로 작동하는 보안담당 프레임워크입니다. 보안은 모든 웹 애플리케이션의 가장 중요한 측면 중 하나이다. 사용자 데이터를 안전하게 유지하고 무단 접근을 방지하기 위해 개발자는 강력한 보안 조치를 구현해야 한다.
기본용어
- 접근 주체(Principal) : 보호된 리소스에 접근하는 대상
- 인증(Authentication) : 보호된 리소스에 접근한 대상에 대해 누구인지, 애플리케이션의 작업을 수행해도 되는 주체인지 확인하는 과정(ex. Form 기반 로그인) => 즉, 누구인지?
- 인가(Authorize) : 해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인하는 과정(After Authentication, 인증 이후) => 즉, 어떤 것을 할 수 있는지?
- 권한 : 어떠한 리소스에 대한 접근 제한, 모든 리소스는 접근 제어 권한이 걸려있음. 인가 과정에서 해당 리소스에 대한 제한된 최소한의 권한을 가졌는지 확인
크게 봤을 때 이제 [인증] 과정과 [인가] 과정으로 이루어져 있다. 확인을 해서 진짜
1. Authentication (인증)
인증은 사용자의 신원을 확인하는 과정입니다.
1.1 사용자의 요청 처리
- 사용자가 애플리케이션에 로그인 요청을 보냅니다.
- 로그인 요청은 Spring Security의 필터 체인(Filter Chain)을 통과합니다. 기본적으로 요청은 UsernamePasswordAuthenticationFilter에서 처리됩니다.
1.2 AuthenticationManager 동작
- AuthenticationManager는 사용자의 자격 증명을 확인하는 중심 컴포넌트입니다.
- AuthenticationManager는 실제 인증을 수행하는 AuthenticationProvider에 작업을 위임합니다.
- 기본적으로 Spring Security는 DaoAuthenticationProvider를 사용하여 데이터베이스와 사용자 인증을 처리합니다.
1.3 UserDetailsService와 UserDetails
- DaoAuthenticationProvider는 UserDetailsService를 사용하여 사용자의 세부 정보를 로드합니다.
- UserDetailsService는 사용자 정보를 제공하는 인터페이스입니다. 애플리케이션 개발자는 이를 구현하여 사용자 정보를 DB에서 로드할 수 있습니다.
- UserDetails는 사용자 이름, 비밀번호, 권한 등 사용자의 세부 정보를 포함하는 객체입니다.
1.4 인증 결과 처리
- 인증이 성공하면 Spring Security는 인증된 사용자 정보를 SecurityContextHolder에 저장합니다.
- 인증 실패 시, Spring Security는 예외를 던지거나 적절한 응답을 반환합니다.
2. Authorization (권한 부여)
권한 부여는 인증된 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 과정입니다.
인사시스템에서는 이제
2.1 필터를 통한 요청 검증
- 사용자가 리소스에 접근하면 요청은 Spring Security의 필터 체인을 다시 통과합니다.
- AccessDecisionManager는 사용자의 권한과 요청된 리소스의 보안 설정을 비교하여 액세스를 허용할지 결정합니다.
2.2 @PreAuthorize 및 @Secured
- Spring Security는 메서드 레벨에서 권한을 검사하기 위해 애너테이션 기반 권한 부여를 지원합니다.
- @PreAuthorize: 메서드 실행 전에 권한을 검사합니다.
- @Secured: 특정 권한이나 역할을 가진 사용자만 메서드를 호출할 수 있도록 제한합니다.
2.3 SecurityContextHolder 활용
- 인증 정보는 SecurityContext를 통해 관리되며, SecurityContextHolder를 통해 접근할 수 있습니다.
- 권한 부여 과정에서 인증된 사용자의 권한 정보가 사용됩니다.
3. Spring Security 기본 구성 요소
3.1 Security Filter Chain
- 모든 HTTP 요청은 Spring Security의 필터 체인을 통과합니다.
- 주요 필터:
- UsernamePasswordAuthenticationFilter: 기본 로그인 처리
- BasicAuthenticationFilter: Basic 인증 처리
- ExceptionTranslationFilter: 예외 처리
- FilterSecurityInterceptor: 최종 권한 확인
3.2 Security Config 클래스
Spring Security는 Java Config를 사용하여 설정합니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll() // 공용 리소스 허용
.antMatchers("/admin/**").hasRole("ADMIN") // 관리자 전용
.anyRequest().authenticated() // 그 외 인증 필요
.and()
.formLogin() // 기본 로그인 폼 사용
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER")
.and()
.withUser("admin").password("{noop}password").roles("ADMIN");
}
}
4. Spring Security 과정 요약
- 사용자가 요청을 보냄.
- 요청은 Security Filter Chain을 통과.
- 인증이 필요하면 AuthenticationManager에서 인증 수행.
- 인증이 성공하면 SecurityContextHolder에 저장.
- 리소스 접근 시, 사용자의 권한을 확인하여 요청을 허용하거나 거부.
728x90
반응형
'이유's Programming > Spring' 카테고리의 다른 글
JWT token 동작 방법 (0) | 2024.11.20 |
---|---|
ApacheBenchTest 하는 법 (1) | 2024.10.16 |