-
Spring Boot API - Spring SecurityFrameWork/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
'FrameWork > Spring&Spring-boot' 카테고리의 다른 글
Spring Core - 로그 추적기(V2 파라미터로 동기화 개발) (0) 2024.03.04 Spring Core - 로그 추적기(프로토타입, V1) (1) 2024.03.04 Spring Boot API - Swagger, Actuator, HAL Explorer (0) 2024.02.21 Spring Boot API - User Service, Exception Handing... (0) 2024.02.19 SpringBoot - Bean추가, Configuration, Path Variable (0) 2024.02.19