안쪽까지 들여다보는 스프링 시큐리티 (구현하며 이해하는 인증·인가·OAuth 2.0·테스트)

안쪽까지 들여다보는 스프링 시큐리티 (구현하며 이해하는 인증·인가·OAuth 2.0·테스트)

$42.00
Description
“안쪽까지 이해할 때 스프링 시큐리티의 정수가 보입니다.”
드디어 나왔습니다. 이토록 심도 있게 스프링 시큐리티를 다룬 국내 저자의 책은 없었습니다. 스프링 시큐리티는 스프링 생태계의 핵심적인 보안 프레임워크입니다. 간단한 설정만으로 인증과 인가 구조에 기반한 안정적인 보안 구조를 제공합니다. 스프링 시큐리티를 입문 수준에서 익히는 것은 어렵지 않습니다. 하지만 상황에 맞는 커스터마이징, 예외 처리, 구성 변경 등 문제 해결을 위해서는 내부 구조와 원리를 이해하는 것이 필수입니다. 많은 스프링 시큐리티 사용자가 당황하게 되는 지점도 이와 관련이 있습니다. 안정적이고 간편하게 기능을 제공하는 스프링 시큐리티의 간편함이 역설적으로 더 심화한 설정이 요구되는 순간 블랙박스를 만드는 셈입니다.

“스프링 시큐리티의 블랙박스를 열어봅니다.”
먼저 스프링 시큐리티의 인증, 인가 실행 원리를 큰 흐름에서 살펴본 다음 특정 컴포넌트에 대한 세세한 내용을 다룹니다. 이론적인 설명을 다룬 다음엔 간단한 시나리오를 바탕으로 실습하여 이론을 넘어서 코드로 들여다볼 수 있습니다. 폼 로그인, HTTP 기본 인증, 리멤버-미 등 다양한 인증 방식의 내부 메커니즘을 분석하고 이를 실제로 적용하여 회원가입부터 로그인 처리까지 구현하는 프로세스를 익힐 수 있습니다. 또한 실무에서 필수적인 CSRF 및 CORS 방어를 통한 애플리케이션 보호 방법과, OAuth 2.0 및 OpenID Connect를 활용한 구글·네이버 SNS 로그인 및 KeyCloak 연동과 관련된 내용 등을 상세히 다루어 현대적인 인증 시스템 구축의 전반을 경험할 수 있도록 하였습니다.
저자

강준현

현대적인 소프트웨어 아키텍처와 보안 해결책의 접점을 탐구하는 시니어 소프트웨어 엔지니어이자 애자일 컨설턴트다. 포스코DX(구 포스코ICT)에서 대규모 MES의 서버 개발 및 운영을 담당하며 실시간 무중단 가동 시스템의 안정성을 경험했다. 이후 스타트업 지뉴인의 개발 리드를 거쳐, 애자일 혁신의 중심지인 브로드컴의 탄주 랩스(구 피보탈 랩스)에서 소프트웨어 엔지니어 및 애자일 컨설턴트로 활동했다. 현재는 비카인드랩스코리아에서 시니어 소프트웨어 엔지니어로서 복잡한 비즈니스 요구사항을 애자일 방법론과 견고한 엔지니어링으로 풀어내는 데 집중하고 있다.
스프링 프레임워크 생태계에 대한 관심을 바탕으로, 수많은 실전 프로젝트에서 스프링 시큐리티를 활용한 보안 아키텍처를 설계하고 구축해 왔다. 프레임워크의 내부 동작 원리를 파고들어 컴포넌트를 확장하거나 고난도의 문제를 해결하는 과정을 블로그에 기록하며 지식을 공유하고 있다.
블로그: https://junhyunny.github.io/

목차

읽기 전 가이드

1부. 스프링 시큐리티 소개
_1장. 서블릿 필터 체인과 아키텍처
__1.1. 서블릿 컨테이너와 서블릿 필터 체인
___1.1.1. 서블릿과 서블릿 컨테이너
___1.1.2. 서블릿 컨테이너 종류
___1.1.3. 서블릿 필터 체인
__1.2. 서블릿 필터 체인 확장
___1.2.1. DelegatingFilterProxy 클래스
__1.3. 시큐리티 필터 체인
___1.3.1. 시큐리티 필터 체인 동작 과정
___1.3.2. 인증/인가 필터들
_2장. Hello Spring Security
__2.1. 인텔리제이 설치
__2.2. 첫 스프링 시큐리티 프로젝트 만들기
___2.2.1. 프로젝트 만들기
___2.2.2. 프로젝트 살펴보기
__2.3. 컨트롤러 만들기
__2.4. 의존성 추가하기
___2.4.1. 에러 응답
___2.4.2. 에러 원인
__2.5. 사용자 인증받기
___2.5.1. 폼 로그인 인증
___2.5.2. HTTP 기본 인증

2부. 인증
_3장. 스프링 시큐리티 인증 아키텍처
__3.1. Authentication 인스턴스
__3.2. 인증 매니저와 제공자
___3.2.1. 인증 매니저
___3.2.2. 인증 제공자
__3.3. Authentication 인스턴스 보관
___3.3.1. 시큐리티 컨텍스트
___3.3.2. 시큐리티 컨텍스트 홀더
___3.3.3. 시큐리티 컨텍스트 보관 전략
___3.3.4. 시큐리티 컨텍스트 보관 전략별 특징
____3.3.4.1. ThreadLocal 클래스
____3.3.4.2. 스레드 로컬 모드
____3.3.4.3. 상속 가능한 스레드 로컬 모드
____3.3.4.4. 전역 모드
__3.4. 인증 프로세스 필터
__3.5. 인증 핸들러
___3.5.1. 인증 성공 핸들러
___3.5.2. 인증 실패 핸들러
___3.5.3. 포워드와 리다이렉트
_4장. 폼 로그인 인증
__4.1. 폼 로그인 디폴트 설정과 필터 체인
___4.1.1. UsernamePasswordAuthenticationFilter 클래스
___4.1.2. DefaultLoginPageGeneratingFilter 클래스
___4.1.3. DefaultLogoutPageGeneratingFilter 클래스
__4.2. 폼 로그인 사용자 인증 프로세스
__4.3. 폼 로그인 인증 컴포넌트
___4.3.1. 사용자 인증 작업
___4.3.2. 사용자 정보 조회
___4.3.3. 비밀번호 암호화
____4.3.3.1. NoOpPasswordEncoder 클래스
____4.3.3.2. BCryptPasswordEncoder 클래스
____4.3.3.3. Argon2PasswordEncoder 클래스
____4.3.3.4. Pbkdf2PasswordEncoder 클래스
____4.3.3.5. SCryptPasswordEncoder 클래스
____4.3.3.6. DelegatingPasswordEncoder 클래스
_5장. 폼 로그인 인증 구현하기
__5.1. 프로젝트 구성
__5.2. 회원 가입 구현
___5.2.1. 회원 가입 페이지
___5.2.2. SignUpController 클래스
___5.2.3. SignUpService 클래스
___5.2.4. UserRepository 인터페이스
___5.2.5. SignUp 레코드 클래스
___5.2.6. UserEntity 클래스
___5.2.7. SecurityConfig 클래스
___5.2.8. 사용자 회원 가입
__5.3. 로그인 구현
___5.3.1. 로그인 페이지
___5.3.2. LoginController 클래스
___5.3.3. UserService 클래스
___5.3.4. User 클래스
___5.3.5. SecurityConfig 클래스
___5.3.6. 사용자 로그인
___5.3.7. 인증 완료 리다이렉트와 SecurityContextHolderFilter 클래스
__5.4. 메인 화면과 로그아웃 구현
___5.4.1. 홈페이지
___5.4.2. HomeController 클래스
___5.4.3. @AuthenticationPrincipal 애너테이션
___5.4.4. SecurityConfig 클래스
___5.4.5. 사용자 로그아웃
__5.5. 인증 실패 처리 구현
___5.5.1. 인증 예외 처리 과정
___5.5.2. 로그인 페이지
___5.5.3. LoginController 클래스
___5.5.4. SecurityConfig 클래스
___5.5.5. 인증 실패 메시지 확인
_6장. HTTP 기본 인증
__6.1. HTTP 기본 인증이란?
__6.2. HTTP 기본 인증 디폴트 설정과 필터 체인
___6.3. HTTP 기본 인증 예외 처리
_7 장. HTTP 기본 인증 구현하기
__7.1. 프로젝트 구성
__7.2. 사용자 정보 준비하기
__7.3. 시큐리티 필터 체인 구성
__7.4. API 엔드포인트 구현
__7.5. 사용자 인증
___7.5.1. 인증되지 않은 사용자
___7.5.2. 잘못된 자격 증명을 가진 사용자
___7.5.3. 옳은 자격 증명을 가진 사용자
___7.5.4. 권한이 맞지 않은 사용자
__7.6. 렐름 이름 변경
___7.6.1. SecurityConfig 클래스
___7.6.2. 잘못된 자격 증명을 가진 사용자 요청
_8 장. 리멤버-미 인증
__8.1. 리멤버-미 디폴트 설정과 필터 체인
__8.2. 리멤버-미 사용자 인증 프로세스
___8.2.1. 로그인 사용자 기억하기
___8.2.2. 리멤버-미 사용자 인증
__8.3. 리멤버-미 인증 컴포넌트
___8.3.1. 리멤버-미 인증 토큰
___8.3.2. 리멤버-미 인증 제공자
___8.3.3. 리멤버-미 인증 서비스
____8.3.3.1. NullRememberMeServices 클래스
____8.3.3.2. AbstractRememberMeServices 클래스
____8.3.3.3. TokenBasedRememberMeServices 클래스
____8.3.3.4. PersistentTokenBasedRememberMeServices 클래스
____8.3.3.5. 토큰 기반과 영속성 토큰의 장단점
_9장. 리멤버-미 인증 구현하기
__9.1. 프로젝트 구성
__9.2. 메인 화면 구현
___9.2.1. 메인 페이지
___9.2.2. MainController 클래스
___9.2.3. SecurityConfig 클래스
___9.2.4. 메인 화면
__9.3. 로그인 구현
___9.3.1. 로그인 페이지
___9.3.2. LoginController 클래스
___9.3.3. AppConfig 클래스
___9.3.4. SecurityConfig 클래스
___9.3.5. 사용자 로그인
__9.4. 홈 화면 구현
___9.4.1. 홈페이지
___9.4.2. HomeController 클래스
___9.4.3. 홈페이지 자동 로그아웃
__9.5. 리멤버-미 서비스와 데이터베이스 연결
___9.5.1. AppConfig 클래스
___9.5.2. SecurityConfig 클래스
___9.5.3. 영속성 토큰 테이블 사용 확인하기
_10장. 익명 인증
__10.1. 익명 인증 필터
__10.2. 익명 인증 관련 설정
___10.2.1. 인증 주체 변경
___10.2.2. 역할 이름 변경
___10.2.3. 익명 인증 비활성화
_11 장. 인증 이벤트
__11.1. 인증 이벤트 프로세스
__11.2. 인증 이벤트 참여 컴포넌트
___11.2.1. 인증 이벤트 발행자
____11.2.1.1. NullEventPublisher 클래스
____11.2.1.2. DefaultAuthenticationEventPublisher 클래스
___11.2.2. 스프링 이벤트
_12 장. 인증 이벤트 구현하기
__12.1. 프로젝트 구성
__12.2. 시큐리티 필터 체인 및 컨트롤러 준비
___12.2.1. HomeController 클래스
___12.2.2. SecurityConfig 클래스
___12.2.3. AppConfig 클래스
__12.3. 인증 성공 이벤트 리스너 구현
___12.3.1. LoginSuccessEventListener 클래스
___12.3.2. 인증 성공 이벤트 확인
__12.4. 인증 실패 이벤트 리스너 구현
___12.4.1. LoginFailureEventListener 클래스
___12.4.2. 인증 실패 이벤트 확인

3부. 인가
_13 장. 스프링 시큐리티 인가 아키텍처
__13.1. 사용자 권한
__13.2. 인가 매니저
__13.3. 레거시 인가 아키텍처
___13.3.1. 접근 결정 관리자
___13.3.2. 접근 결정 투표자
___13.3.3. 레거시 인가 처리 마이그레이션
_14 장. HTTP 요청 기반 인가
__14.1. 인가 필터
___14.1.1. 인가 필터 구성하기
___14.1.2. AuthorizationFilter 클래스
__14.2. 인증/인가 예외 처리
___14.2.1. ExceptionTranslationFilter 인스턴스와 인증/인가 예외 처리
___14

출판사 서평

“구조 + 원리 + 구현 실습 = 스프링 시큐리티 마스터”
다양한 프로젝트를 경험한 저자의 경험과 지식, 인사이트를 기반으로 스프링 시큐리티의 핵심 원리를 파헤칩니다. 큰 그림을 살펴보고, 이어서 보다 자세한 구현 방식과 원리를 살펴보고, 마지막으로 코드 기반 구현 실습이 뒤따르는 구성을 통해 코드 단위까지 분해하여 습득합니다.

〈1부 스프링 시큐리티 소개〉
스프링 시큐리티의 내부 구조와 원리를 이해하기 위한 기본적 내용을 알아보고 실습 준비를 합니다.

핵심 주제
ㆍ서블릿 컨테이너
ㆍ서블릿 필터 체인
ㆍ시큐리티 필터 체인
ㆍ인텔리제이 실습 환경

〈2부 인증〉
서비스를 이용하고자 하는 사용자가 정말 그 대상이 맞는지 확인하는 작업을 ‘인증’이라고 합니다. 스프링 시큐리티가 지원하는 다양한 인증 방식을 탐구해 봅니다.

핵심 주제
ㆍ스프링 시큐리티 인증 아키텍처
ㆍ폼 로그인 인증
ㆍHTTP 기본 인증
ㆍ리멤버-미 인증
ㆍ익명 인증
ㆍ인증 이벤트

〈3부 인가〉
어떤 서비스를 이용하는 사용자의 신원을 확인하는 작업을 인증이라고 하면 인가는 인증된 사용자가 적합한 권한이나 역할을 가졌는지 확인하는 것입니다. 스프링 시큐리티가 지원하는 다양한 인가 작업을 탐구합니다.

핵심 주제
ㆍ스프링 시큐리티 인가 아키텍처
ㆍHTTP 요청 기반 인가
ㆍ메서드 기반 인가
ㆍ인가 이벤트

〈4부 애플리케이션 보호〉
인증, 인가 메커니즘만으로 애플리케이션이 안전해지는 것은 아닙니다. 스프링 시큐리티가 제공하는 웹 서비스 환경에서 일반적으로 사용하는 공격 방법들에 대한 보호 수단을 탐구합니다.

핵심 주제
ㆍ사이트 간 요청 위조
ㆍ교차 출처 리소스 공유
ㆍ보안 HTTP 응답 헤더

〈5부 Spring Security OAuth 2.0〉
먼저 OAuth 2.0 프레임워크와 OAuth 2.0 프레임워크를 기반으로 기능을 확장한 OIDC(OpenID Connect)를 살펴봅니다. 이후 스프링 시큐리티가 OAuth 2.0 인가 프로세스에 참여하는 컴포넌트인 클라이언트, 리소스 서버를 지원하기 위해 어떤 기능들을 제공하는지 하나씩 살펴봅니다.
핵심 주제
ㆍOAuth 2.0 프레임워크와 OIDC
ㆍ스프링 시큐리티 OAuth2 로그인
ㆍSNS 로그인 구현하기
ㆍ스프링 시큐리티 OAuth2 클라이언트
ㆍOAuth2 클라이언트 구현하기

〈6부 스프링 시큐리티 테스트〉
스프링 프레임워크는 개발자 경험을 향상하고 테스트 작성을 원활하게 만드는 도구를 제공한다. 테스트와 이를 지원하는 도구를 탐구하는 것으로 책을 마무리한다.
핵심 주제
ㆍ단위 테스트와 테스트 더블
ㆍ결합 테스트와 스프링 부트 테스트
ㆍ메서드 기반 인가 지원
ㆍ스프링 MVC 테스트 지원 - 기본
ㆍ스프링 MVC 테스트 지원 - OAuth2