본문 바로가기

전지적라온시점

Spring Security 인증과 인가 기초 완벽 가이드 본문

Development/Spring

Spring Security 인증과 인가 기초 완벽 가이드

최라온 2025. 5. 15. 16:15
728x90
반응형
SMALL

Spring Security 인증과 인가 기초 완벽 가이드

Spring Security는 Spring 기반 애플리케이션에서 인증(Authentication)인가(Authorization)를 처리하는 보안 프레임워크입니다. 이 글에서는 Spring Security의 기본 개념과 작동 방식, 실무 적용 방법을 중심으로 설명합니다.

1. 인증과 인가란?

  • 인증 (Authentication): 사용자의 신원을 확인하는 절차 (로그인)
  • 인가 (Authorization): 인증된 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지를 검사

2. Spring Security의 기본 작동 흐름

  1. 사용자가 로그인 폼을 통해 아이디/비밀번호 제출
  2. UsernamePasswordAuthenticationFilter가 인증 시도
  3. AuthenticationManager가 사용자 정보 확인
  4. SecurityContext에 인증된 사용자 정보 저장
  5. 인가 단계에서 접근 권한 확인

3. 기본 설정 예제 (SecurityConfig)

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/", "/login", "/signup").permitAll()
                .anyRequest().authenticated()
            .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/home")
            .and()
                .logout()
                .logoutSuccessUrl("/login?logout");
    }
}

4. 사용자 정보 처리 (UserDetailsService)

Spring Security는 사용자 정보를 커스터마이징할 수 있도록 UserDetailsService 인터페이스를 제공합니다.

@Service
public class CustomUserDetailsService implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) {
        // DB에서 사용자 조회
        return new User(username, password, List.of(new SimpleGrantedAuthority("ROLE_USER")));
    }
}

5. 패스워드 암호화 (PasswordEncoder)

실무에서는 비밀번호를 반드시 암호화하여 저장하고 검증해야 합니다.

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

6. 권한 기반 접근 제어

  • hasRole("ROLE_ADMIN"): ROLE 기반 접근 제어
  • hasAuthority("READ_PRIVILEGE"): 세분화된 권한 기반 제어
  • 메서드 보안: @PreAuthorize("hasRole('ADMIN')") 사용 가능

7. SecurityContext의 구조

  • SecurityContextHolder: 현재 사용자 인증 정보 저장
  • Authentication: 인증 객체
  • Principal: 실제 사용자 정보 (UserDetails)

8. 실무 적용 팁

  • 사용자 테이블: username, password, role 필드는 필수
  • 권한은 "ROLE_" prefix가 필수 (예: ROLE_USER)
  • 세션 타임아웃 및 CSRF 설정 확인
  • REST API 개발 시 JWT + Stateless 방식 고려

9. 결론

Spring Security는 스프링 애플리케이션에서 인증과 인가를 체계적으로 구현할 수 있는 보안 프레임워크입니다. 기본 구조와 흐름을 이해하고 UserDetailsService, PasswordEncoder, SecurityContext 등을 정확히 설정하면 실무에서도 안전한 로그인 및 권한 관리를 구현할 수 있습니다.

728x90
반응형
LIST