SPRING Security(스프링 시큐리티)

Ga0·2023년 4월 20일
0

SPRING

목록 보기
10/14

스프링 시큐리티란?

  • 인증(Authentication)인가(Authorization), 전반적인 보안을 제공하는 스프링 프레임워크이다.
  • 시큐리티를 사용하면 자체적으로 세션을 체크해야하는 번거로움을 해결할 수 있고, redirect를 일일히 설정하는 번거로움을 해결할 수 있다.

인증(Authentication)

  • 특정 리소스에 엑세스하려는 사용자의 ID를 확인하는 방법이다.
  • 예로 로그인 과정은 사용자 Username과 Password를 이용하여 인증을 처리하거나 SNS 소셜 로그인을 이용하여 인증을 위임하는 경우도 있다.
  • 인증된 사용자의 정보는 Session을 통해 관리하거나 토큰을 만들어 관리하는 방법을 이용한다.

인가(Authorization)

  • 인증을 통해 사용자가 누구인지 확인 후 현재 사용자가 특정 URL이나 기능을 사용(접근)하려 할 때 권한이 있는지 검사하는 것을 말한다.
  • 권한이 있는지 없는지 판단하여 허가를 해주는 과정이라 볼 수 있고, 보편적으로 권한은 ROLE_접두어가 붙은 권한을 부여 받는다.

Spring Security Authentication Architecture

① 사용자가 로그인 정보와 함께 인증 요청을 한다. (Http Request)

② AuthenticationFilter가 요청을 가로채고, 가로챈 정보를 통해 usernamePasswordAuthentication의 인증용 객체(Token)를 생성한다.
-> 만약 요청을 가로채지 않는다면, Presentation Layer의 DispatcherServlet로 갈것이다.

③ 생성한 UsernamePasswordToken(인증용 객체(Token))을 AuthenicationManager(인터페이스)의 구현체인 ProviderManager에게 전달한다.

④ AuthenticationManager(≑ProviderManager)는 등록된 AuthenticationProvider를 조회하여 인증을 요구한다.

⑤ 실제 DB에서 사용자 인증정보를 가져오는 UserDetailsService에 사용자 정보(User)를 넘겨준다.

⑥ 넘겨받은 사용자 정보(AuthenticationProvider에서 조회한 결과)를 통해 DB에서 찾은 사용자 정보인 UserDetails 객체를 만든다.
-> UserDetailsService에서 제공하는 메소드를 사용하기 위해서는 UserDetails이라는 인터페이스를 구현해야 한다.

⑦ AuthenticationProvider는 UserDetailsService을 통해 UserDetails(≑사용자정보(User))를 받아서 인증용 객체(사용자 정보)와 비교한다.

⑧ 인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체(인증성공된 객체)를 반환하여 AuthenticationManager(=ProviderManager)에 전달한다.

⑨ 다시 AuthenticationManager(=ProviderManager)은 AuthenticationFilter에 Authentication 객체를전달(반환)한다.

⑩ Authentiication 객체를 SecuriryContextHolder의 SequrityContext에 저장된다.


⁕userDetails

  • Spring Security에서 사용자의 정보를 담는 인터페이스는 UserDetails 인터페이스

⁕userDetailsService

  • DB에서 유저 정보를 직접 가져오는 인터페이스이자, DB에서 유저 정보를 불러오는 중요한 메소드가 제공한다.

0개의 댓글