본문 바로가기

공부/Spring

스프링 부트 3 백엔드 개발자 되기_14


8장 스프링 시큐리티로 로그인/로그아웃, 회원가입 구현하기


8-1
스프링 시큐리티?

인증과 인가


인증: 사용자의 신원을 입증하는 과정 ex)사용자가 사이트에 로그인할 때 누구인지 확인하는 과정
인가: 사이트의 특정 부분에 접근할 수 있는지에 권한을 확인하는 작업 ex)관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 못들어감
이런 권한을 확인하는 과정을 인가

인증과 인가 관련 코드를 생으로 작성하려면 시간이 많이 필요하나 스프링 시큐리티를 사용하면 간단하게 처리 가능

스프링 시큐리티:
스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임 워크
보안 관련 옵션을 많이 제공
애너테이션으로 설정하기도 쉽다
CSRF 공격, 세션 고정  공격을 방어해주고 요청헤더도 보안 처리를 해줘서 개발자가 보안 관련 개발을 해야하는 부담을 크게 줄여줌

필터 기반으로 동작하는 스프링 시큐리티
: 스프링 시큐리티는 필터 기반으로 동작

필터는 책에 있는 사진 참고
:특정 필터를 제거하거나 필터 뒤에 커스텀 필터를 넣을수도 있음

중요한 필터는  UsernamePasswordAuthentication과 FilterSecurityInterceptor

UsernamePasswordAuthentication: 아이디와 패스워드가 넘어오면 인증 요청을 위임하는 인증 관리자 역할
FilterSecurityInterceptor: 권한 부여 처리를 위임해 접근 제어 결정을 쉽게 하는 접근 결정 관리자 역할


1.HTTP요청(사용자가 폼에 아이디와 패스워드를 입력)
2.HTTPServeletRequest에 아이디와 비밀번호 정보가 전달, 이때 AuthenticationFilter가 넘어온 아이디와 비밀번호의 유효성 검사를 함
3.유효성 검사 완료후 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨줌
4.전달받은 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에게 보냄
5.UsernamePasswordAuthenticationToken을 AuthenticationProvider에 보냄
6.사용자 아이디를 UserDetailService에 보냄
7.UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails 객체로 만들어 AuthenticationProvider에게 전달
8.DB에 있는 사용자 정보를 가져옴
9.입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리
10. 8~10까지의 인증이 완료되면 SecurityContextHolder에 AuthenticationSuccessHandler, 실패하면 AuthenticationFailureHandler실행

어떤 흐름으로 로그인이 동작하는지 이해하면 스프링 시큐리티를 잘 이해할 수 있음



8-2
회원 도메인 만들기
회원정보를 저장할 테이블을 만들고 테이블과 연결할 도메인을 만든 후 이 테이블과 연결할 회원 엔티티를 만들고 회원 엔티티와 연결되어 데이터를 조회할 리포지터리 만들기
마지막으로 스프링 시큐리티에서 사용자 정보를 가져오는 서비스를 만들기

 

책에 있는대로 추가했는데 UserDetails


add library 'Gradle:implementation 'org.springframework.boot:spring-boot-strater-security-core:6.0.1' to classpath

(205pg)