Spring Security

철준·2023년 1월 11일
0

SpringBoot

목록 보기
1/1
  1. 스프링 시큐리티 설명
  2. filter, provider, userdetails
  3. cors, preflight, etc

1. 스프링 시큐리티란

MVC 패턴 이전에 필터로 동작하는 스프링 기반의 애플리케이션의 보안(인증, 권한, 인가)을 담당하는 스프링 하위 프레임워크이다.
스프링 시큐리티의 인터셉터가 특정 페이지에 대한 요청에 권한이 없을 때 요청을 가로채 로그인 페이지로 넘가게 해준다.

인증(Authentication) : 사용자의 신원을 확인
인가(Authorization) : 인증 이후 요청한 자원에 접근할 수 있는지 확인하는 절차

구조
보편적으로 username, password 패턴의 인증방식인데 security는 principal, credential 패턴을 갖는다.
Authentication 검증 -> 통과 된다면 권한을 부여받는 과정이다.

2. Filter, Provider, UserDetails

AuthenticationFilter
모든 요청에 대하여 AuthenticationFliter가 인증 및 권한 부여 과정을 거쳐 Dispatcher Servlet으로 요청을 넘긴다.
Authentication은 Token 객체를 통해 검증과정을 거친다.

Provider
실제 검증을 수행하는 객체이다.
principal, credentiald에서 principal을 바탕으로 유저 정보를 불러온다.

여기서 유저 정보를 불러 오려면
UserDetails
객체를 불러와야한다. 불러오기 위해서 UserDetailsService를 사용하여 db에서 유저 정보를 가져온다.(loadUserByUsername 메서드를 통해 UserDetails 객체를 반환한다.)

여기까지가 검증과정이다.
호출 순서의 반대로 Authentication 객체를 차례 반환해주면서 인증-검증-권한부여를 종료한다.

security는 내부적으로 SecurityContext에 Authentication 객체를 저장하고 filter가 최종적으로 반환한 Authentication 객체를 저장하고 필요할 때 꺼내서 권한을 확인한다.
이역할은 WebSecurityConfigureeAdapter 객체가 수행한다.

WebSecurityConfigureeAdapter
security의 전반적인 설정을 담당한다.
여기서 오버로딩된 configure 메서드를 이용해 filter를 추가하고, uri별 권한을 설정한다.

3. cors, preflight, etc...

WebSecurityConfigureeAdapter에서 cors도 설정할 수 있다.
스프링 시큐리티 프레임원크 안에 cors 체인이 따로 존재한다.
cors는 간단하게 cross Origin Resource Sharing 으로 교차출처(다른 출처)공유 정책이다.
동일 출처가 아닌 경우 사용자의 정보가 도난 당할 위험이있다.
cors 설정도 아래와 같이 설정이 가능하다.

preflight란
simpleRequest 조건에 해당하지 않을 때 예비요청과 본요청으로 나누어서 전송을 하는데 예비요청이 preflight이다. 요청을 보내기 전에 미리 토큰을 확인하기 위해 요청한다.
simpleRequest는 Content-Type이 Multipart/form-data, text/plain, application/x-www-form-urlencoded이거나 GET, HEAD, POST 중 하나의 메서드를 갖는 요청이다.
스프링 시큐리티가 알아서 잘 써준다...

다음은 쿠키 앤드 세션

0개의 댓글