티스토리 뷰

728x90
반응형

목차

     

    Spring Security

     

    Spring Security는 인증, 권한 부여 및 보안 기능을 제공하는 스프링 프레임워크이다.

     

    먼저 사용되는 용어를 간단히 정리하자.

     

    User, Principal

     

    인증을 시도하는 주체User, 주체의 구체적인 정보(Username ID)Principal이라고 한다.

    실제로는 혼용돼서 사용되는 듯하며, 보통 Entity 클래스에 그 정보가 담긴다.

     

    Authentication

     

    인증은 User, 혹은 Principal이 본인이 맞음을 증명하는 절차를 말한다.

    정상적인 인증을 위해 제출하는 식별 정보Credential(신원 증명 정보)이라고 한다.

     

    Authorization

     

    권한 부여, 혹은 인가는 인증을 통과한 사용자에게 역할(Role)에 따라

     

    특정 리소스에 대한 접근권한(Authority)을 부여하는 절차이다.

    사용자에 따라 권한을 제어하는 행위를 따로 접근 제어(Access Control)라 부르기도 한다.

    권한 부여는 당연하게도 반드시 인증과정 이후에 수행되어야 한다.

    이상의 용어를 그림으로 나타내면 대략 아래와 같이 된다.

     

     

    General Workflow and Servlet Filters WITHOUT Spring Security

     

    먼저 Spring Security 적용과 무관하게 인증과 권한 부여의 흐름을 보자.

     

    보안이 적용된 앱 요청의 일반적인 흐름은 위와 같다. 간단히 정리하면 아래와 같다.

     

    1. 클라이언트가 크리덴셜을 담아 인증 요청을 보낸다.
    2. 인증 관리자가 저장소에서 크리덴셜을 가져와 검증한다.
    3. 인증 검증에 통과한 요청은 권한부여 관리자의 검증을 거친다.
    4. 권한부여 인증에 통과한 사용자는 특정 리소스에 대한 접근권한을 획득한다.

    이와 같은 과정을 위해 자바는(더 정확하게는 서블릿 기반 프로그램은) 서블릿 필터를 제공한다.

     

    여기서 서블릿이란 클라이언트의 요청을 처리 및 반환하는 기술을 말하며,

     

    필터란 쉽게 말해 사용자의 요청을 중간에서 가로채 필요한 처리를 하는 클래스를 말한다.

     

    javax.servlet.Filter를 구현한 서블릿 필터(스프링 필터가 아니다)는 아래와 같은 필터 체인을 구성할 수 있다.

     

    여기까지 보니 필터, 혹은 인터셉터를 잘 구성하면 이대로도 괜찮은 로그인 시스템을 구현할 수 있을 것 같이 생겼다.

     

    그렇다면 왜 굳이 Spring Security를 사용해야 할까?

     

    공식 문서를 포함한 여러 글을 종합하면 대략 아래와 같은 이유가 있다.

     

    • 인증과 권한 부여에 대한 포괄적이고 유연한 지원
    • Session fixation(세션ID 탈취), Clickjacking(클릭 가로채기), CSRF(위조 공격 전송) 등에 대한 방어 지원
    • 서블릿 API와의 간편한 연동
    • Spring Web MVC와의 선택적 연동(즉, 필수가 아니다)
    • 모든 URL에 대해 인증을 요구하며, 로그아웃 기능 지원
    • HSTS(HTTP Strict Transport Security) 강화 - HTTPS 접속 강제 가능

    즉, 짧게 요약하면 기존의 서블릿 필터와 쉽게 호환 가능하며 필요한 거의 모든 추가 기능을 이미 구현해두었기 때문이다.

     

    계속해서 Spring Security가 서블릿 필터에 끼어드는 과정을 살펴보자.

     

    WITH Spring Security

     

    시작은 다음과 같은 프록시 클래스 두 개를 끼워 넣는 것이다.

     

    여기서 DelegatingFilterProxy 클래스는 본래는 별개의 프로세스라 섞일 수 없는

     

    서블릿 필터와 Spring Security 필터를 연결해주는 매개체라고 생각하면 된다.

     

    또한 그 이름에서 짐작할 수 있듯이 필터 처리를 위임하는 역할도 하는데,

     

    중간 과정을 조금 건너뛰자면 위임의 대상이 바로 FilterChainProxy이며 실제 보안 처리는 이곳에서 하게 된다.

     

    해당 과정은 아래와 같다.

     

    당연하게도 하나의 URL에 복수의 필터 체인을 등록할 수 있으며, 체인의 적용 순서 역시 입맛대로 바꿀 수 있다.

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/09   »
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30
    글 보관함