Spring Security

yshjft·2022년 1월 29일
1

Spring Security

목록 보기
1/6

✔︎ Spring Security란?

인증과 인가를 담당하는 스프링 하위 프레임워크로서 Filter를 기반으로 동작하며 개발자가 일일이 보안관련 로직을 작성할 필요가 없도록 해준다.

✔︎ 주로 등장할 용어 정리

  • principal, 접근 주체

    • 리소스에 접근하는 대상을 의미
  • authentication, 인증

    • 누구인지 확인하는 것
    • ex) 로그인
  • authorize, 인가

    • 권한을 확인하는 것
    • ex) 블로그에서 A가 작성한 글을 B는 수정할 수 없다.
  • Authentication manager, 인증관리자

    • 누구인지 확인
  • Access Decision Manager, 접근 결정 관리자

    • 요청을 할 수 있는 권한이 있는지 확인

✔︎ Spring Security 요청 처리 플로우

✔︎ Spring Security 주요 필터들

필터들은 굉장히 많다. 따라서 필요한 필터들을 선택하여 사용하자.

  • SecurityContextPersistenceFilter

    • SecurityContextRepository를 통해 SecurityContext를 불러오거나 저장하는 역할을 한다.
  • LogoutFilter

    • 로그아웃 URL(기본값: /logout)로의 요청을 감시하여 해당 사용자를 로그아웃 시킨다.
  • UsernamePasswordAuthenticationFilter

    • ID/비밀번호 기반 Form 인증 요청 URL(기본값: /login)을 감시하여 사용자를 인증한다.
  • ExceptionTranslationFilter

    • 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달
    • ExceptionHandler와 비슷한 역할은 한다고 생각하면 편할 듯
  • FilterSecurityInterceptor

    • 접근 권한 확인을 위해 요청을 AccessDecisionManager로 위임
    • 해당 필터가 시행되는 시점에는 사용자가 인증되었다고 판단

✔︎ Spring Security Authentication Architecture

유저가 로그인을 시도
(1 ~ 3)
→ AuthenticationFilter가 유저가 보낸 정보를 가로채고 인증용 객체(UsernamePasswordAuthentication Token)를 생성
→ AuthenticationFilter 인증용 객체를 AuthenticationManager에게 보낸다

(4 ~ 6)
→ AuthenticationManager에서 Authentication에 들어갈 내용(사용자 이름 등)을 채운 후 Authentification 객체를 UserDetailsService에 전달
→ UserDetailsService에서 Authentication과 DB의 데이터를 비교하여 유저임을 확인했다면 UserDetails라는 객체로 가지고와 User Session을 생성하게 된다.

(10)
→ UserDetails를 Spring Security의 인메모리 세션 저장소인 SecurityContext Holder에 저장한다.
→ UserSession ID와 함께 응답을 보낸다.

이후 요청의 cookie의 JSESSIONID를 검증 후 유효 하다면 인증을 하게된다.

Spring Security Authentication Architecture에 대한 정말 너무 좋은 글을 보자!

✔︎ 로그인 후

  • 로그인 진행이 완료가 되면 시큐리티 session이 생성된다 → Security Context Holder에 session을 저장한다
  • Security Session에 들어갈 수 있는 정보는 Authentication 타입 객체이다.
  • Authentication 객체 안에 UserDetails 타입의 User 정보가 있어야 한다.
  • Security Session ➡ Authentication ➡ UserDetaills(PrincipalDetails)

✔︎ 참고

profile
꾸준히 나아가자 🐢

0개의 댓글