본문 바로가기
TIL

항해99_TIL220527 (Spring Security란)

by Hyeongjun_Ham 2022. 5. 28.

주특기 숙련 주차 시작

스프링 시큐리티 응용으로 과제를 마쳐야한다

할게 쏟아진드아앍

 

- Spring Security (스프링 시큐리티)

 

 

스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크입니다. 인증(Authenticate, 누구인지?) 과 인가(Authorize, 어떤것을 할 수 있는지?)를 담당하는 프레임워크를 말합니다.

스프링 시큐리티에서는 주로 서블릿 필터(filter)와 이들로 구성된 필터체인으로의 구성된 위임모델을 사용합니다.

그리고 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있습니다.

 

스프링 시큐리티 특징과 구조

  •  보안과 관련하여 체계적으로 많은 옵션을 제공하여 편리하게 사용할 수 있음
  •  Filter 기반으로 동작하여 MVC와 분리하여 관리 및 동작
  • 어노테이션을 통한 간단한 설정
  • Spring Security는 기본적으로 세션 & 쿠키방식으로 인증

 

 

  • 인증관리자(Authentication Manager)접근 결정 관리자(Access Decision Manager)를 통해 사용자의 리소스 접근을 관리
  • 인증 관리자는 UsenamePasswordAuthenticationFilter, 접근 결정 관리자는 FilterSecurityInterceptor가 수행

쿠키와 세션

 

 

스프링 시큐리티 처리과정

 

  1. 사용자가 인증 요청을 보냄
  2. AuthenticationFilter가 HttpServletRequest에서 사용자가 보낸 아이디와 패스워드를 인터셉트한다. 그리고 안전을 위해서 아이디와 패스워드의 유효성 검사를 한다. 이후 토큰을 만들어 준다.
  3.  AuthenticationManager에게 토큰을 전달 받는다.
  4. 실제 인증을 할 AuthenticationProvider에게 토큰을 다시 전달한다.
  5. DB에서 사용자 인증 정보를 가져올 UserDetailsService에게 아이디를 넘겨주고 DB에서 인증에 사용할 사용자 정보를 UserDetails라는 객체로 전달 받는다.
  6. AuthenticationProvider는 UserDetails객체를 전달 받은 이후 실제 사용자의 입력정보와 UserDetail객체를 가지고 인증을 시도한다.
  7. 인증이 완료되면 사용자 정보를 가진 Authentication 객체를 SecurityContextHolder에 담은 이후 AuthenticationSuccessHandle를 실행한다.(실패시 AuthenticationFailureHandler를 실행한다.)

 

시큐리티 필터 종류

  • UsernamePasswordAuthenticationFilter : username / password 로 로그인을 하려고 하는지 체크하여 승인이 되면 Authentication을 부여하고 이동 할 페이지로 이동한다.
  • HeaderWriterFilter : Request의 Http 해더를 검사하여 header를 추가하거나 빼주는 역할을 한다.
  • CorsFilter : 허가된 사이트나 클라이언트의 요청인지 검사하는 역할을 한다.
  • CsrfFilter : Post나 Put과 같이 리소스를 변경하는 요청의 경우 내가 내보냈던 리소스에서 올라온 요청인지 확인한다.
  • LogoutFilter : Request가 로그아웃하겠다고 하는것인지 체크한다.
  • ConcurrentSessionFilter : 동시 접속을 허용할지 체크한다.
  • BearerTokenAuthenticationFilter : Authorization 해더에 Bearer 토큰을 인증해주는 역할을 한다.
  • BasicAuthenticationFilter : Authorization 해더에 Basic 토큰을 인증해주는 역할을 한다.
  • RequestCacheAwareFilter : request한 내용을 다음에 필요할 수 있어서 Cache에 담아주는 역할을 한다. 다음 Request가 오면 이전의 Cache값을 줄 수 있다.
  • SecurityContextHolderAwareRequestFilter : 보안 관련 Servlet 3 스펙을 지원하기 위한 필터라고 한다.
  • RememberMeAuthenticationFilter : 아직 Authentication 인증이 안된 경우라면 RememberMe 쿠키를 검사해서 인증 처리해준다.
  • AnonymousAuthenticationFilter : 앞선 필터를 통해 인증이 아직도 안되었으면 해당 유저는 익명 사용자라고 Authentication을 정해주는 역할을 한다. (Authentication이 Null인 것을 방지!!)
  • SessionManagementFilter : 서버에서 지정한 세션정책에 맞게 사용자가 사용하고 있는지 검사하는 역할을 한다.
  • ExcpetionTranslationFilter : 해당 필터 이후에 인증이나 권한 예외가 발생하면 해당 필터가 처리를 해준다.
  • FilterSecurityInterceptor : 사용자가 요청한 request에 들어가고 결과를 리턴해도 되는 권한(Authorization)이 있는지를 체크한다. 해당 필터에서 권한이 없다는 결과가 나온다면 위의 ExcpetionTranslationFilter필터에서 Exception을 처리해준다.

 

 종류가 굉장히 많다. 필요에 따라서 찾아보고 사용하면 될 듯

 

 

 

출처: https://devuna.tistory.com/55

 

[Spring Security] 스프링시큐리티의 기본 개념과 구조

[Spring Security] 스프링시큐리티의 개념/시작하기 /기본세팅 💡 스프링시큐리티(Spring Security)란? 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프

devuna.tistory.com

 

 출처 : https://www.bottlehs.com/springboot/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-spring-security%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%9D%B8%EC%A6%9D-%EB%B0%8F-%EA%B6%8C%ED%95%9C%EB%B6%80%EC%97%AC/

 

스프링 부트 Spring Security를 활용한 인증 및 권한부여

스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한,인가 등)을 담당하는 스프링 하위 프레임워크이다. 주로 서블릿 필터와 이들로 구성된 필터체인으로의 위임모델을 사용한

www.bottlehs.com

 

- 내일 할 일

다른 스프링 시큐리티강의 들으면서 내가 짠 코드에 적용을 좀 해봐야겠다.

기술을 적용하는데 빡세긴 할 것 같다.