안쪽까지 들여다보는 스프링 시큐리티 (구현하며 이해하는 인증·인가·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장.HelloSpringSecurity
__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.2.2.AuthenticationEntryPoint인스턴스
__14.3.요청일치자
___14.3.1.매칭조건과접근가능조건
___14.3.2.RequestMatcher인스턴스
____14.3.2.1.AntPathRequestMatcher클래스
____14.3.2.2.MvcRequestMatcher클래스
____14.3.2.3.AnyRequestMatcher클래스
____14.3.2.4.ELRequestMatcher클래스
____14.3.2.5.RegexRequestMatcher클래스
__14.4.HTTP요청기반인가매니저
___14.4.1.RequestMatcherDelegatingAuthorizationManager클래스
___14.4.2.AuthenticatedAuthorizationManager클래스
___14.4.3.AuthorityAuthorizationManager클래스
___14.4.4.AuthoritiesAuthorizationManager클래스

출판사 서평

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

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

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

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

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

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

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

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

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

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

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