Spring Security (2) - 주요 구조

hyozkim·2020년 1월 21일
2

Spring Security

목록 보기
2/6
post-thumbnail

Spring Security 기반 인증 & 인가 처리

Spring Security 주요 개념

Spring Security 주요 용어 및 컴포넌트 요약

  • 접근 주체(Principal) - 보호된 리소스에 접근하는 사용자
    - Authentication으로 추상화
  • 인증(Authenticate) - 현재 사용자가 누구인지 식별
    - 주요 컴포넌트 - AuthenticationManager, AuthenticationProvider
  • 인가(Authorize) - 현재 사용자가 보호된 리소스에 권한이 있는지를 검사
    - 주요 컴포넌트 - AccessDecisionManager, AccessDecisionVoter
  • GrantedAuthority
    - 인증된 사용자의 인증정보(역할 등)을 표현
  • SecurityContext
    - 접근 주체(Authentication)와 인증정보(GrantedAuthority)을 담고 있는 Context
    • ThreadLocal에 보관되며, SecurityContextHolder를 통해 접근할 수 있음

Spring Security Filter

기본 설정시 Spring Security는 일련의 서블릿 필터 체인을 자동으로 구성함

Spring Security 주요 필터 정리

  • SecurityContextPersistenceFilter
    - SecurityContextRepository를 통해 SecurityContext를 Load/Save 처리
  • LogoutFilter
    - 로그아웃 URL(기본값: /logout)로의 요청을 감시하여 해당 사용자를 로그아웃 시킴
  • UsernamePasswordAuthenticationFilter
    - ID/비밀번호 기반 Form 인증 요청 URL(기본값: /login)을 감시하여 사용자를 인증함
  • ExceptionTransiationFilter
    - 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달
  • FilterSecurityInterceptor
    - 접근 권한 확인을 위해 요청을 AccessDecisionManager로 위임
    • 이 필터가 실행되는 시점에는 사용자가 인증됐다고 판단

Spring Security 인증 처리 요약

인증(Authentication) 처리를 위한 핵심 컴포넌트

  • UsernamePasswordAuthenticationFilter
    • 사용자 인증 요청을 Authentication 인터페이스로 추상화하고, AuthenticationManager를 호출한다.
    • Authentication 인터페이스에서 제공하는 핵심 메소드
      • Object getPrincipal() - 인증 아이디
      • Object getCredentials() - 인증 비밀번호
      • Collection<? extends GrantedAuthority> getAuthorities() - 인증된 사용자의 권한 목록
      • Object getDetails() - 인증된 사용자의 부가정보
  • AuthenticaitonManager
    • 사용자 아이디/비밀번호를 인증하기 위해 적절한 AuthenticationProvider 찾아 처리를 위임한다.
  • AuthenticationProvider
    • 실질적으로 사용자 인증을 처리하고, 인증 결과를 Authentication 인터페이스로 반환한다.

Spring Security 인가 처리 요약

인가(Authorization) 처리를 위한 핵심 컴포넌트

  • AccessDecisionManager
    - 인증된 사용자의 보호 리소스 접근 여부를 판단한다. 3개의 기본 구현을 제공한다.
    - AffirmativeBased: 접근을 승인하는 voter가 1개 이상
    - ConsesusBased: 과반수
    - UnanimouseBased: 모든 voter가 승인해야 함
  • AccessDecisionVoter
    - AccessDecisionManager는 다수의 AccessDecisionVoter로 구성된다.
    • 각각의 Voter는 주어진 정보를 기반으로 승인(ACCESS_GRANTED), 거절(ACCESS_DENIED), 보류(ACCESS_ABSTAIN)를 반환한다.
      • RoleVoter는 보호 리소스에 접근하기 위한 구너환을 사용자가 지니고 있는지 확인함
        • WebExpressionVoter는 SpEL 표현식에 따른 웹 접근제어를 처리함

인가 처리에 대한 기준을 조건에 따라 ACCESS_GRANTED, ACCESS_DENIED, ACCESS_ABSTAIN 3개 중 승인, 거절, 보류를 반환해주면 된다.

Spring 프로젝트는 오픈 소스니 코드를 보고 이해하는 능력을 키워야 한다. 문서만 보고 이해하기에는 어려운 부분이 있다. 조급해하지 말고 천천히 꾸준하게 익숙해져가는게 중요하다.

(프로그래머스) 단순 CRUD는 그만! 웹 백엔드 시스템 구현 온라인 스터디(Java반) 강의를 수강하고 제가 이해한대로 정리했습니다. 문제가 될시 삭제하겠습니다!

profile
차근차근 develog

0개의 댓글