Spring Security란?

청포도봉봉이·2023년 6월 11일
1

Spring

목록 보기
19/35

Spring Security

자바 기반의 웹 애플리케이션에서 보안을 구현하기 위해 사용되는 강력하고 포괄적인 보안 프레임워크입니다. 주요 목표는 애플리케이션의 인증(Authentication)과 권한 부여(Authorization)를 관리하여 사용자, 자원 및 서비스의 보안을 유지하고 강화하는 것입니다.


사용 이점과 기능

보안 기능 제공

스프링 시큐리티는 다양한 보안 기능을 제공하여 웹 애플리케이션을 보호합니다. 이를 통해 인증, 권한 부여, 세션 관리, 암호화, 크로스 사이트 스크립팅(XSS) 및 크로스 사이트 요청 위조(CSRF) 방어 등의 보안 측면을 다룰 수 있습니다.


인증과 권한 부여 관리

스프링 시큐리티는 사용자 인증과 권한 부여를 관리합니다. 사용자를 인증하기 위해 다양한 인증 메커니즘을 지원하며, 사용자의 권한과 역할에 따라 접근 권한을 부여할 수 있습니다. 또한 사용자 데이터베이스, LDAP, OAuth 등 다양한 백엔드 시스템과 통합하여 인증 및 권한 부여를 구현할 수 있습니다.


유연한 구성 가능성

스프링 시큐리티는 유연한 구성을 통해 다양한 보안 요구 사항에 대응할 수 있습니다. 필요에 따라 설정을 수정하거나 커스터마이징하여 인증 및 권한 부여 규칙을 변경할 수 있습니다. 또한 애플리케이션에 맞는 사용자 지정 필터 및 인터셉터를 추가할 수 있습니다.


다양한 인증 방식 지원

스프링 시큐리티는 다양한 인증 방식을 지원합니다. 폼 기반 인증, HTTP 기본 인증, 토큰 기반 인증(JWT), OAuth 등의 인증 방식을 선택할 수 있습니다. 이는 애플리케이션에 맞는 인증 방식을 선택하여 보안 수준을 유연하게 조정할 수 있음을 의미합니다.


개발 생산성 향상

스프링 시큐리티는 보안에 대한 많은 부분을 처리해주기 때문에 개발자는 보안 구현에 집중하기보다 핵심 비즈니스 로직에 더 많은 시간을 할애할 수 있습니다. 이는 개발 생산성을 향상시키고 안전한 애플리케이션을 더 빠르게 구축할 수 있음을 의미합니다.


커뮤니티 및 지원

스프링 시큐리티는 활발한 개발자 커뮤니티와 함께 있으며, 다양한 문서, 예제 및 튜토리얼이 제공됩니다. 따라서 스프링 시큐리티를 사용하면 문제 해결과 지원에 대한 자료를 쉽게 찾을 수 있습니다.




구성요소와 설정

SecurityFilterChain

SecurityFilterChain은 보안 필터 체인을 구성하는 역할을 합니다.
보안 필터 체인은 요청에 대한 필터링 및 보안 기능을 적용하는 일련의 필터들의 집합입니다.
일반적으로 HttpSecurity 객체를 사용하여 보안 필터 체인을 설정하고 반환합니다.
HttpSecurity:

HttpSecurity

객체는 보안 필터 체인을 구성하는 빌더 클래스입니다.
http를 통해 HttpSecurity 객체를 얻을 수 있으며, 이를 통해 다양한 설정을 할 수 있습니다.

인증(Authentication) 설정

httpBasic(): HTTP 기본 인증을 활성화합니다.
formLogin(): 폼 기반 인증을 활성화합니다.
loginPage("/login"): 사용자 정의 로그인 페이지를 지정합니다.
loginProcessingUrl("/authenticate"): 로그인 처리 URL을 지정합니다.
usernameParameter("username"), passwordParameter("password"): 사용자명과 비밀번호 파라미터를 지정합니다.
defaultSuccessUrl("/home"): 인증 성공 시 이동할 URL을 지정합니다.
failureUrl("/login?error"): 인증 실패 시 이동할 URL을 지정합니다.

권한 부여(Authorization) 설정

authorizeRequests(): 요청에 대한 인가 설정을 시작합니다.
antMatchers("/admin/**").hasRole("ADMIN"): "/admin/" 경로는 "ADMIN" 역할을 가진 사용자에게만 허용합니다.
antMatchers("/user/").hasAnyRole("USER", "ADMIN"): "/user/" 경로는 "USER" 또는 "ADMIN" 역할을 가진 사용자에게 허용합니다.
anyRequest().authenticated(): 그 외의 모든 요청은 인증된 사용자만 접근할 수 있습니다.

세션 관리(Session Management) 설정

sessionManagement(): 세션 관리에 대한 설정을 시작합니다.
sessionCreationPolicy(SessionCreationPolicy.STATELESS): 세션을 생성하지 않도록 설정합니다.

Cross-Site Request Forgery (CSRF) 설정

csrf().disable(): CSRF 보호를 비활성화합니다.

PasswordEncoder

PasswordEncoder는 비밀번호를 안전하게 저장하기 위해 사용됩니다.
PasswordEncoderFactories.createDelegatingPasswordEncoder()를 호출하여 PasswordEncoder를 생성합니다.

예시

package study.till.back.config;

import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .httpBasic().disable()
                .csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/api/**").permitAll()
                .anyRequest().authenticated();
        return http.build();
    }
}
  1. httpBasic().disable().csrf().disable(): rest api이므로 basic auth 및 csrf 보안을 사용하지 않는다는 설정입니다.

  2. sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS): 세션을 사용하지 않는다는 설정입니다.

  3. antMatchers().permitAll(): 해당 API에 대해서는 모든 요청을 허가한다는 설정입니다.

  4. anyRequest().authenticated(): 이 밖에 모든 요청에 대해서 인증을 필요로 한다는 설정입니다.

profile
서버 백엔드 개발자

0개의 댓글