포스팅 목차 (책의 목차와 다릅니다 개인적으로 공부한 내용입니다)
8장 스프링 시큐리티로 로그인/로그아웃, 회원가입 구현하기
8-1. 인증과 인가
8-2. 스프링 시큐리티
8-1. 인증과 인가
인증(authentication)은 사용자의 신원을 입증하는 과정이고 인가(authorization)는 인증과 달리 사이트의 특정 부분에 접근할 수 있는지에 권한을 확인하는 작업입니다.
예를 들면, 인증은 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정
인가는 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관지라 페이지에 들어 갈수 없음
으로 이해하면 될 듯합니다.
해당 인증과 인가의 개념은 스프링 시큐리티를 이해할때 알아두면 편한 개념입니다.
8-2. 스프링 시큐리티
스프링 시큐리티(spring security)는 스프링 기반의 어플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링의 하위 프레임워크입니다. 보안 관련 옵션을 많이 제공하고 애너테이션으로 설정도 매우 쉽다는 장점이 있습니다. 또한 CSRF공격, 세션 고정(session fixation) 공격을 방어해주고, 요청 헤더도 보안 처리를 해주므로 개발자가 보안 관련 개발을 해야하는 부담을 줄여주는 프레임워크입니다.
CSRF공격 : 사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격
세선 고정 공격 : 사용자의 인증 정보를 탕취하거나 변조하는 공격
스프링 시큐리티는 필터 기반으로 동작합니다.
스프링 시큐리티의 필터 구조를 살펴 보면 굉장히 복잡해 보여 처음에는 부담스럽게 다가올 수 있지만 한번 확인 그림으로 보면서 알아가 보도록 하겠습니다.
스프링 시큐리티는 위의 그림처럼 다양한 필터들로 나누어져 있으며, 각 필터에서 인증, 인가와 관련된 작업을 처리합니다
SecurityContextPersistenceFilter부터 시작하여 FilterSecurityInterceptor까지 순서대로 필터를 거칩니다
각 필터가 무엇을 하는지 알아보고 정리하고 개념편을 끝내도록 하겠습니다
필터명 | 설명 |
SecurityContextPersistenceFilter | SecurityContextRepository에서 SecurityContext(접근주체와 인증에대한 정보를 담고 있는 객체)를 가져오거나 저장하는 역할 |
LogoutFilter | 설정된 로그아웃 URL로 오는 요청 확인후 로그아웃 처리 |
UsernamePasswordAuthenticationFilter | 인증관리자. 폼 기반 로그인 할 때 사용되는 필터로 아이디, 패스워드 데이터를 파싱해 인증 요청을 위임. 인증이 성공하면 AuthenticationSuccessHandler를 실행 인증이 실패하면 AuthentivationFailureHandler를 실행 |
DefaultloginPageGeneratingFilter | 로그인 페이지를 지정하지 않았을때 기본 설정되는 로그인 페이지 관련 필터 |
BasicAuthenticationFilter | 요청 헤더에 있는 아이디와 패스워드를 파싱해서 인증 요청을 위임. 인증이 성공하면 AuthenticationSuccessHandler를 실행 인증이 실패하면 AuthentivationFailureHandler를 실행 |
RequestCacheAwareFilter | 로그인 성공후, 관련 있는 캐시 요청이 있을 경우 캐시 요청을 처리합니다. |
SecurityContextHolderAwareRequestFilter | HttpServletRequest 정보를 감쌉니다. 필터 체인 상의 다음 필터들에게 부가정보를 제공하기 위해 사용 |
AnonymousAuthenticationFilter | 필터가 호출되는 시점까지 인증되지 않았다면 익명 사용자 전용 객체를 만들어 SecurityContext에 넣어줍니다. |
SessionManagementFilter | 인증된 사용자 관련된 세션 관련 작업을 진행 세션 변조 방지 전략을 설정, 유효하지 않은 세션 처리, 세션 생성 전략을 세우는등 처리 |
ExceptionTranslationFilter | 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달. |
FilterSecurityInterceptor | 접근 결정 관리자. AccessDecisionManager로 권한 부여 처리를 위임함으로써 접근 제어 결정을 쉽게합니다. |
이처럼 간단하게 개념을 알아 봤습니다.
너무 방대하다보니 적기에는 너무 많아서 실제로 해봐야 도움이 되는 프레임 워크인듯 합니다.
실제로 코드를 짜다보면 아이디와 패스워드 기반 폼 로그인을 많이 이용하는데 스프링 시큐리티에서는 어떠한 절차로 인증 처리를 하는지 실습편에서 알아보도록 하겠습니다.
이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 8장 써머리입니다.
'3.1 SpringBoot > 묘공단 SpirngBoot3' 카테고리의 다른 글
[묘공단/spring] 10장 OAuth2로 로그인/로그아웃 구현하기 - 개념 (0) | 2023.11.09 |
---|---|
[묘공단/spring] 9장 JWT로 로그인/로그아웃 구현하기- 개념 (0) | 2023.11.09 |
[묘공단/spring] 7장 블로그 화면 구성하기 - 개념 (0) | 2023.10.31 |
[묘공단/spring] 6장 블로그 기획하고 API만들기 -실습편 (4) | 2023.10.11 |
[묘공단/spring] 6장 블로그 기획하고 API만들기 - 개념 (0) | 2023.10.11 |
댓글