Spring Security스프링 프레임워크 기반의 인증과 권한 부여(Authentication & Authorization)를 담당하는 보안 프레임워크입니다. 웹 애플리케이션과 REST API에서 보안을 강화하기 위해 사용

주요 기능

  1. 인증(Authentication)
    • 사용자가 누구인지 확인하는 과정
    • 예: 로그인 처리
  2. 권한 부여(Authorization)
    • 인증된 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지 확인
    • 예: 관리자 페이지 접근 제한
  3. 보안 공격 방어
    • CSRF(Cross-Site Request Forgery) 방어
    • 세션 고정 공격 방어
    • XSS(Cross-Site Scripting) 방어
    • 클릭재킹 방어
  4. 다양한 인증 방식 지원
    • 기본 폼 로그인
    • HTTP Basic Auth
    • OAuth2/OpenID Connect
    • JWT(Json Web Token) 기반 인증

Spring Security 동작 방식

  1. 사용자가 로그인 요청
  2. UsernamePasswordAuthenticationFilter가 요청 처리
  3. 사용자 정보를 AuthenticationManager에 전달하여 인증 시도
  4. 인증 성공 시 SecurityContext에 사용자 정보 저장
  5. 이후 모든 요청은 SecurityContext를 통해 인증 정보 활용

간단한 구성 예제

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasAnyRole("USER", "ADMIN")
                .antMatchers("/", "/public").permitAll()
            .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }

    @Bean
    @Override
    protected UserDetailsService userDetailsService() {
        User.UserBuilder users = User.withDefaultPasswordEncoder();
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(users.username("user").password("password").roles("USER").build());
        manager.createUser(users.username("admin").password("admin").roles("ADMIN").build());
        return manager;
    }
}

설명

  1. /admin/** 경로는 ADMIN 권한만 접근 가능
  2. /user/** 경로는 USER 또는 ADMIN 권한으로 접근 가능
  3. / 및 /public 경로는 모두 허용
  4. 기본 로그인 폼 제공

확장 개념

  1. JWT 기반 인증: REST API에서는 세션 대신 JWT로 인증 정보를 전달
  2. OAuth2 인증: 소셜 로그인 (Google, Facebook) 연동
  3. 커스텀 필터: 사용자 정의 인증 로직 적용

 

Spring Security 아키텍처 개요

Spring Security는 다양한 컴포넌트와 레이어로 구성되어 있으며, 이를 통해 인증(Authentication) 및 **권한 부여(Authorization)**를 처리합니다. 아래는 주요 구성 요소와 그 역할입니다.


Spring Security 주요 구성 요소

1. Security Filter Chain

  • 구성: 여러 보안 필터(예: UsernamePasswordAuthenticationFilter)로 이루어진 체인
  • 동작: HTTP 요청이 필터 체인을 통과하면서 인증 및 권한 부여를 수행
  • 핵심 클래스: DelegatingFilterProxy

주요 필터

  • SecurityContextPersistenceFilter: 요청마다 SecurityContext 관리
  • UsernamePasswordAuthenticationFilter: 폼 기반 로그인 처리
  • ExceptionTranslationFilter: 인증 또는 권한 오류 처리
  • FilterSecurityInterceptor: 최종 접근 제어 결정

2. Security Context

  • 인증된 사용자의 보안 컨텍스트를 저장
  • SecurityContextHolder를 통해 접근 가능
java
복사편집
SecurityContext context = SecurityContextHolder.getContext(); Authentication authentication = context.getAuthentication();

3. AuthenticationManager

  • 역할: 인증 요청을 처리하여 사용자 인증 정보를 반환
  • 주요 메서드: authenticate(Authentication authentication)

구현체

  • ProviderManager: 여러 AuthenticationProvider를 관리

4. AuthenticationProvider

  • 역할: 특정 인증 방식 처리
  • 예: DaoAuthenticationProvider는 데이터베이스 기반 인증

5. UserDetailsService

  • 역할: 사용자 정보를 로드하는 인터페이스
  • 커스터마이징: DB 연동 시 재정의 필요
java
복사편집
@Service public class CustomUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 사용자 정보 조회 로직 return new User(username, password, authorities); } }

6. GrantedAuthority

  • 역할: 사용자의 권한을 나타냄
  • 예: ROLE_USER, ROLE_ADMIN

7. AccessDecisionManager

  • 역할: 요청에 대해 허용 또는 거부 결정
  • 구성 요소: AccessDecisionVoter 목록으로 결정

동작 흐름

  1. 요청(Request) 진입
    • 사용자의 HTTP 요청이 필터 체인으로 전달
  2. 인증(Authentication)
    • AuthenticationManager가 사용자 인증 처리
  3. 보안 컨텍스트 저장
    • SecurityContextHolder에 인증 정보 저장
  4. 권한 부여(Authorization)
    • AccessDecisionManager가 권한 확인
  5. 요청 처리 후 응답

Spring Security 아키텍처 다이어그램

rust
복사편집
Client -> Security Filter Chain -> AuthenticationManager -> AuthenticationProvider -> UserDetailsService -> Database/User Store -> SecurityContextHolder

커스터마이징 포인트

  1. 커스텀 UserDetailsService: 사용자 정보 조회 로직
  2. AuthenticationProvider: 커스텀 인증 처리
  3. Security Filter 추가: JWT 토큰 인증 등
  4. AccessDecisionVoter: 권한 체크 로직 커스터마이징

 

 

 

 

'Spring' 카테고리의 다른 글

Spring Swagger  (0) 2025.02.10
WebSocket 예제  (0) 2024.12.05
WebSocket  (0) 2024.12.05
Controller 와 Restcontroller  (0) 2024.11.28
Spring - AutoWired  (0) 2024.11.27

+ Recent posts