본문 바로가기
Programming/Spring Boot

[Spring Boot] Spring Security

by 공부합시다홍아 2024. 5. 27.

스프링 시큐리티

스프링 시큐리티는 스프링에 login을 처리하는 모듈이다.
같은 시큐리티 기반이라도 코딩이 버전별로, 로그인방식에 따라 모두 다르다.
시큐리티는 방대한 스프링 모듈이다.

로그인의 방식

  1. 시큐리티 없는 일반로그인 (일반세션 사용)
  2. 시큐리티 일반로그인 (시큐리티 세션 사용)
  3. 시큐리티 JWT 로그인 (서버가 다를 때)
  4. 시큐리티 OAuth2방식 로그인(제 3자 인증로그인)
  5. SSO로그인

용어

  • 인증(Authentication) - 로그인 된 사람
  • 권한(Role) - 로그인 된 사람 + role(권한)이 있는사람
  • 인가(Authorization) - 권한을 부여하는 행위

  1. 사용자가 로그인 정보와 함께 인증 요청을 한다.(Http Request)
  2. AuthenticationFilter(필터)가 요청을 가로채고, 가로챈 정보를 통해 UsernamePasswordAuthenticationToken(시큐리티세션이 쓰는 인증토큰)의 인증용 객체를 생성한다.
  3. AuthenticationManager(인증매니저)의 구현체인 ProviderManager에게 생성한 UsernamePasswordAuthenticationToken(시큐리티세션이 쓰는 인증토큰)객체를 전달한다.
  4. AuthenticationManager는 등록된 AuthenticationProvider(들)을 조회하여 인증을 요구한다.
  5. 실제 DB에서 사용자 인증정보를 가져오는 UserDetailsService(서비스영역)에 사용자 정보를 넘겨준다.
  6. 넘겨받은 사용자 정보를 통해 DB에서 찾은 사용자 정보인 UserDetails(유저정보) 객체를 만든다.
  7. AuthenticationProvider(들)은 UserDetails를 넘겨받고 사용자 정보를 비교한다.
  8. 인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication(이게 있다면 인증됨)객체를 반환한다.
  9. 다시 최초의 AuthenticationFilter에 Authentication(이게 있다면 인증됨)객체가 반환된다.
  10. Authenticaton 객체를 SecurityContext(시큐리티세션) 에 저장한다.

시큐리티 세션의 모형

new 시큐리시세션(new 인증객체(new 유저객체)))
new SecurityContextHolder( new Authentication( new UserDetails() ) )

시큐리티 라이브러리 추가

//시큐리티 버전은 스프링버전에 따라 사용방법이 완전히 다릅니다.
//시큐리티 5버전 => 스프링 부트 2버전 (수업)
//시큐리티 6버전 => 스프링 부트 3버전 (문법이 완전 변경되니 주의)
implementation 'org.springframework.boot:spring-boot-starter-security'
//시큐리티 타임리프에서 사용
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
//시큐리티 테스트
testImplementation 'org.springframework.security:spring-security-test'
  • 시큐리티가 처음 설정 되면 모든 요청에 대해서 시큐리가 기본 제공하는 로그인 화면이 보이게 됩니다.
  • 기본아이디는 user / 비밀번호는 console창에 비밀번호를 발급합니다.
  • 로그아웃의 경로는 /logout이 기본이 됩니다.
  • 로그아웃 이후에는 다시 /hello 요청으로 진입이 불가능해 집니다.

로드시 비밀번호 발급


시큐리티 설정파일 만들기

공식문서 https://docs.spring.io/spring-security/reference/5.7/servlet/configuration/java.html

 

Java Configuration :: Spring Security

Spring Security’s Java Configuration does not expose every property of every object that it configures. This simplifies the configuration for a majority of users. Afterall, if every property was exposed, users could use standard bean configuration. While

docs.spring.io


 

728x90