[Spring Boot] Spring Security - 1

handa·2024년 12월 19일
0
post-thumbnail

Spring Security는 자바 기반 애플리케이션에서 인증(Authentication)과 권한 부여(Authorization)를 제공하는 강력한 보안 프레임워크입니다. Spring Framework의 하위 프로젝트 중 하나로, 다양한 보안 요구사항을 간편하게 구현할 수 있도록 지원하며, 웹 애플리케이션뿐만 아니라 REST API에서도 널리 사용됩니다.


주요 기능

1. 인증 (Authentication)

사용자의 신원을 확인하는 과정입니다.
Spring Security는 다양한 인증 방식을 지원합니다

  • 기본 인증 (HTTP Basic Authentication)
  • 폼 기반 인증 (Form-based Authentication)
  • OAuth2/OpenID Connect
  • LDAP 인증
  • 토큰 기반 인증 (JWT, OAuth2)

2. 권한 부여 (Authorization)

사용자가 특정 리소스나 기능에 접근할 권한이 있는지 확인하는 과정입니다.
Spring Security는 다음을 통해 권한 부여를 관리합니다

  • URL 기반 보안 (URL Pattern)
  • 메소드 기반 보안 (@PreAuthorize, @Secured)
  • 표현식 기반 접근 제어 (SpEL 사용)

3. 보안 필터 체인 (Security Filter Chain)

Spring Security는 HTTP 요청을 처리하기 전에 여러 보안 필터를 거칩니다.
주요 필터

  • UsernamePasswordAuthenticationFilter : 사용자의 인증 정보 확인
  • SecurityContextPersistenceFilter : 보안 컨텍스트 관리
  • ExceptionTranslationFilter : 인증/권한 문제 처리
  • FilterSecurityInterceptor : 권한 검증

4. CSRF 보호

CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 Spring Security는 CSRF 토큰을 생성하고 검증하는 기능을 제공합니다.

5. 세션 관리

  • 세션 고정 공격(Session Fixation Attack) 방지
  • 동시 세션 제한
  • 세션 정책 설정 (예: 무상태, 세션 만료 등)

6. OAuth2와 JWT 지원

Spring Security는 OAuth2와 JWT(Json Web Token)를 간편하게 통합할 수 있는 기능을 제공하여 현대적인 REST API 보안 요구사항을 충족합니다.


아키텍처

1. SecurityContext

Spring Security의 핵심 구성 요소로, 현재 인증된 사용자 정보와 권한을 저장합니다.

2. AuthenticationManager

인증 요청을 처리하는 주요 구성 요소로, 사용자 정보를 검증하고 인증 토큰을 반환합니다.

3. GrantedAuthority

사용자가 가진 권한을 나타냅니다. 예: ROLE_USER, ROLE_ADMIN

4. UserDetailsService

사용자 정보를 가져오는 인터페이스로, 보통 데이터베이스나 외부 시스템에서 사용자 정보를 조회하는 데 사용됩니다.


설정 방법

1. XML 기반 설정

Spring Security의 초기 버전에서 사용된 방법으로, security-context.xml 파일에 설정을 정의합니다.

2. Java Config 기반 설정 (권장)

Java 기반으로 보안을 설정하며, 유연성과 가독성이 뛰어납니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
            .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }
}

3. Spring Boot와의 통합

Spring Boot Starter를 사용하면 보안 구성을 최소화할 수 있습니다.
application.properties 를 사용하여 간단히 보안을 설정할 수 있습니다.


장점

  • 유연한 보안 정책 : 인증, 권한 부여, URL 기반 보안 등 다양한 요구사항 지원.
  • 확장성 : 사용자 정의 인증 필터 및 권한 부여 로직 추가 가능.
  • 강력한 커뮤니티 지원 : Spring Framework의 일환으로 활발히 유지 보수되고 문서화가 잘 되어 있음.
  • 최신 보안 기술 지원 : OAuth2, JWT, SAML 등 현대적 프로토콜 지원.

profile
진짜 해보자

0개의 댓글