11월 16일

Yullgiii·2023년 11월 16일
0
post-thumbnail

어제 밤 강의에서 들었던 스프링 시큐리티

뭔가 애매하게 알고있는듯 해서 좀더 자세하게 알아보기로 했다.!!!

인증(Authentication) 🚀

인증은 주체(Principal)가 누구인지 확인하는 과정이다. 스프링 시큐리티는 Form 인증, Basic 인증, Digest 인증, OAuth2.0 인증 등 다양한 인증 방식을 지원한다. 사용자가 로그인을 하면 스프링 시큐리티는 인증 요청을 가로채서 인증을 진행한다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

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

위의 예제 코드에서는 사용자의 상세 정보를 가져오는 UserDetailsService를 AuthenticationManagerBuilder에 등록하고 있다. 이렇게 하면 사용자가 로그인을 시도할 때, 입력한 사용자 이름으로 UserDetailsService를 통해 사용자 정보를 가져와서 비밀번호를 비교하여 인증을 진행한다.

인가(Authorization) 🚀

인가는 주체(Principal)가 리소스에 접근할 권한이 있는지 확인하는 과정이다. 스프링 시큐리티는 URL 패턴으로 접근 권한을 제어하거나, 메소드 호출 시 접근 권한을 확인하는 등 다양한 방식으로 인가를 처리한다.

@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")
                .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}

위의 예제 코드에서는 /admin/ URL 패턴에는 'ADMIN' 역할을 가진 사용자만 접근 가능하도록 설정하였고, /user/ URL 패턴에는 'USER' 또는 'ADMIN' 역할을 가진 사용자만 접근 가능하도록 설정하였다. 그리고 그 외의 모든 요청에는 인증된 사용자만 접근 가능하도록 설정하였다.

회고 🚀

오늘의 학습을 통해 스프링 시큐리티의 인증과 인가에 대해 깊이 있게 이해할 수 있었다. 스프링 시큐리티는 강력한 인증과 인가 기능을 제공함으로써, 보안이 중요한 웹 애플리케이션 개발에 있어서 필수적인 도구라는 것을 느꼈다. 또한, 인증과 인가 과정이 어떻게 동작하는지, 어떤 방식으로 설정할 수 있는지 등을 배움으로써 보다 안전한 웹 애플리케이션을 개발할 수 있을 것이라는 생각만 들었는데 아직 활용에 있어서는 내가 부족하다고 느껴졌다...

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글