ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot API - Spring Security
    FrameWork/Spring&Spring-boot 2024. 2. 21. 16:45

    Spring Security

    spring 기반 애플리케이션 보안(인증, 권한)을 처리하는 프레임워크

    https://spring.io/projects/spring-security

     

    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '3.1.5'

    RESTful API에서는 어플리케이션의 인증 처리를 위해서는 다양한 방식이 있는데  Oauth, Token, 아이디-비밀번호 등을 통해서 인증을 할 수 있다. 

     

     

    스프링 시큐리티가 적용된 상태에서 security password 없이 전체 user를 조회하는 위와 같은 uri를 호출하면 401 Unauthorized와 같은 오류가 발생하는 것을 확인할 수 있다.  

     

     

    'spring-boot-starter-security' 종속성을 주입하면 콘솔에 위와 같이 username - user, passwrod-***~~~로 접속할 수 있는 password가 출력된다. 

     

    직접 지정한 username과 password 사용하기

    spring.security.user.name=username
    spring.security.user.password=passw0rd

     

     

    위와 같이 application.properties에 username과 password를 지정하면 지정된 패스워드로 전체 user를 불러오는 uri에 접근할 수 있게 된다. 

     

    사용자와 password를 application.properties파일에 포함하게 되면 한번 지정된 username과 password를 변경하기 위해서 매번 서버를 다시 restart해야한다. 따라서 고정 username-password를 사용하는 것보다. *LDAP 혹은 데이터에비스 등에서 사용자 정보를 가져오는 방법 등을 사용하는 게 훨씬 좋다. 

     

    *LDAP(Lightweight Directory Access Protocl) : 경량 디렉토리 접근 프로토콜은 네트워크상에서 조직이나 개인의 파일, 디바이스 등을 찾아 볼 수 있게 해주는 소프트웨어 프로토콜이다. 

     

    Configuration을 사용해서 username-password지정

     

    @Configuration
    public class SecurityConfig {
    
        @Bean
        UserDetailsService userDetailsService(){
            InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager();
    
            UserDetails user = User.withUsername("user")
                    .password(passwordEncoder().encode("passwOrd"))
                    .authorities("read")
                    .build();
    
            userDetailsService.createUser(user);
    
            return userDetailsService;
        }
    
        @Bean()
        BCryptPasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
        
    }

     

    ❗다만 위의 방법은 쉬운 예시를 위한 방법이고 실제로 서버를 운영할때는 추천하지 않는다. 

     

    BcryptPasswordEncoder라는 객체는 crypt 해싱함수를 사용한다. 사용자 비밀번호를 인코딩해주는 메서드와 사용자에 의해 제출된 비밀번호와 저장되어있는 비밀번호가 서로 일치하는지 확인해 줄 수 있는 메서드를 제공해 준다. 생성자의 인자 값으로 해싱하고자 하는 강도도 조정할 수 있다는 이점이 있으므로 실제로 스프링 시큐리티에서 자주사용된다.

     

    [출처 - Spring Boot 3.x를 이용한 RESTful Web Service 개발, 저 Dowon Lee]

    https://www.inflearn.com/course/spring-boot-restful-web-services

    댓글

Designed by Tistory.