이번 섹션에서는 [스프링 시큐리티 기본 API 및 Filter 이해]에 대해서 알아보자.
👉 목차는 다음과 같다.
1) 인증 API - 프로젝트 구성 및 의존성 추가
2) 인증 API - 사용자 정의 보안 기능 구현
3) 인증 API - Form Login 인증
4) 인증 API - Form Login 인증 필터 : UsernamePasswordAuthenticationFilter
5) 인증 API - Logout 처리, LogoutFilter
6) 인증 API - Remember Me 인증
7) 인증 API - Remember Me 인증 필터 : RememberMeAuthenticationFilter
8) 인증 API - 익명사용자 인증 필터 : AnonymousAuthenticationFilter
9) 인증 API - 동시 세션 제어, 세션 고정 보호, 세션 정책
10) 인증 API - 세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter
11) 인가 API - 권한 설정 및 표현식
12) 인증/인가 API - 예외 처리 및 요청 캐시 필터 : ExceptionTranslationFilter, RequestCacheAwareFilter
13) Form 인증 - 사이트 간 요청 위조 : CSRF, CsrfFilter
이번 섹션은 1) ~ 2)
, 3) ~ 5)
, 6) ~ 8)
, 9)
, 10)
, 11)
, 12)
, 13)
로 나눠서 포스팅하고자 한다.
바로 하나씩 확인해보자.
API에는 크게 인증 API와 인가 API 두 가지로 나눠서 학습한다. 먼저 인증 API에 대해서 알아볼 것이다.
그 전에 먼저 프로젝트를 생성하자.
① 프로젝트 구성 및 의존성 추가
Project
: Maven ProjectLanguage
: JavaSpring Boot
: 2.2.1Project Metadata
Dependencies
👉 프로젝트 생성 후, SecurityController
클래스를 생성해서 실행해보자.
❗ 그런데 지금 우리 시스템에는 문제점이 있다. 아무런 보안이 적용되지 않았다는 점이다. 따라서 누구라도 우리 시스템에 접근이 가능하다. ( 특별한 권한이 없어도, 사용자마다 인증을 받지 않고도, 모든 자원에 접근이 가능하다. )
👉 그러면 이제 우리 시스템을 보안이 적용된 시스템으로 변경해보자.
username
: userpassword
: console에 출력된 임의의 랜덤값이다.
🤔 그러면 우리가 의존성을 추가했을 때, 어떤 절차를 거쳐서 이러한 보안 기능이 작동하게 되는 것일까?
✔️ 스프링 시큐리티의 의존성 추가 시 일어나는 일들
username
: userpassword
: 랜덤 문자열✔️ 문제점
다음 내용부터는 현재의 시스템의 문제점을 개선해서 좀 더 나은 보안 시스템으로 만들어보자.
이전 내용에서 스프링 시큐리티 의존성을 추가했다.
의존성을 추가하고 서버를 기동하게 되면, 스프링 시큐리티가 초기화 되면서 웹 보안 기능을 활성화하고, 그리고 보안 기능이 우리 시스템에 반영되어 작동되는 것을 확인했다.
그런데 문제점이 있었다. 먼저, 보안 기능이 작동되긴 하지만 현재 우리 시스템에 계정이 하나밖에 없다는 점. 그리고 권한을 추가하거나 변경할 수 없다는 점. 그리고 해커의 침입에 대비할 수 있는 보안 옵션 기능 등이 없다. 지금 우리의 보안 시스템은 아주 단순한 최소한의 기능만 가지고 있다. 따라서 안전한 시스템을 만들기 위해서는 이러한 문제점들을 개선하고 보완할 필요성이 있다.
그래서 이번 내용에서는 사용자 정의 보안 기능을 구현하는 방법에 대해서 알아보자. ( 먼저, 보안 기능을 구현하기 위해서 우리가 알아야 할, 우리가 이해하고 있어야 할 항목들에 대해서 살펴보고, 사용자 정의 보안 기능 설정 클래스를 만들어서 확인해보자. )
✔️ WebSecurityConfigurerAdapter
✔️ 이제 SecurityConfig 라는 이름의 사용자 정의 보안 설정 클래스를 생성하자. 그리고 해당 설정 클래스가 WebSecurityConfigurerAdapter 를 상속받도록 작성하자. 그렇게 되면 우리가 만든 SecurityConfig 설정 클래스 안에서 HttpSecurity 클래스를 사용해서, 세부적이고, 좀 더 우리가 추가적으로 설정할 수 있는 API 들을 활용해서 사용자 정의 보안 기능을 구현할 수 있다. ( HttpSecurity 는 인증 API와 인가 API를 설정할 수 있는 여러가지 API들을 제공한다. )
👉 코드로 적용해보자.
이번 내용에서는 사용자 정의 보안 기능을 구현하기 위해 보안 설정 클래스를 추가했다. 그리고 애플리케이션 구동시 우리가 작성한대로 보안 기능이 작동하는 것을 확인해보았다.
다음 내용부터는 추가한 클래스에 (인증 / 인가) 처리를 위한 여러가지 내용을 더 추가하고, 보안에 필요한 보안 옵션 등 다양한 API 들을 작성하고 테스트해보자.
강의를 듣고 정리한 글입니다. 코드와 그림 등의 출처는 정수원 강사님께 있습니다.