Spring Boot(5) - Spring Security

김형석·2025년 6월 21일
0

LG CNS AM Inspire Camp

목록 보기
18/18

1. 인증과 인가

1-1. 인증

  • 식별된 사용자를 확인하는 과정
  • 사용자가 제공한 자격증명을 활용

1-2. 인증 타입

  • Type 1: 지식 기반(알고 있는 것)
  • Type 2: 소유 기반(가지고 있는 것)
  • Type 3: 특징 기반(생물학적 특징, 필기체 서명 등)

1-3. 2-factor 인증

  • 다중 인증이라고도 함
  • 2개 이상의 인증 타입을 활용하는 것

1-4. 인가

  • 권한부여라고도 함
  • 권한을 확인하는 과정
  • 인증된 사용자의 행위에 대한 수행 가능 여부 판단
  • 역할 지정 방식을 주로 사용 -> RBAC(Role-based Access Control)

2. 접근 통제

2-1. 정의

  • 중요 정보 자산을 보호하기 위한 방법
  • 보안의 3요소
    • 기밀성
    • 무결성
    • 가용성
  • 암호화는 접근 통제가 깨진 경우를 대응하는 방법임

2-2. 계층

2-2-1. 화면

  • 1계층
  • 권한이 있는 사용자에게 특정 기능이 보이도록 함
  • 관리자 페이지 버튼 등

2-2-2. 기능

  • 2계층
  • 화면에 보이지 않더라도 직접 호출 시 기능 사용이 가능할 수 있음
  • 요청한 사용자의 권한을 확인하는 절차를 도입해야 함

2-2-3. 데이터

  • 3계층
  • 데이터 제공 전에 데이터에 대한 접근 권한 및 접근 가능한 데이터 범위를 확인
  • 보이지 않는 게시글 접근, 타인의 결제 내역 접근 등이 3계층 통제에 실패한 것

3. Spring Security 적용하기

3-1. 설치하기

  • spring-boot-starter-security 의존성으로 사용 가능
  • 일단 설치하면 모든 요청이 기본 로그인 페이지로 리다이렉트 됨
  • 기본 설정 PW는 로그 레벨을 info로 해서 확인 가능

3-2. 설정 클래스 사용하기

  • SecurityFilterChain 등을 설정
  • 로그인 페이지에 직접 접근할 수 없어지므로, 커스텀 로그인 구현이 필요

3-3. 커스텀 로그인

  • 로그인을 위한 Controller를 정의해서 구현 가능
  • 로그인 View를 만들고, SecurityFilterChain에 연결
  • 모든 페이지가 커스텀 로그인 페이지로 리다이렉트 됨

3-4. 추가 설정

3-4-1. 보안 설정

  • CSRF
  • CORS

3-4-2. Hash

  • 지정된 길이만큼의 유일한 값을 결과로 제공
  • Message Digest라고 함
  • 키의 길이를 늘림으로써 복호화 난이도를 올릴 수 있음
  • 암호화 시스템에서 적용 가능 -> 비밀번호 암호화 등

3-4-3. Hash 보안 위협 대응

  • 해시 크래킹 기법
    • 해시 값을 이용해서 원문을 찾는 방법
    • 동일 해시 알고리즘에 값을 넣으면서 원문 유추
    • 공격 방법
      • 사전 대입
      • 브루트포스
      • 레인보우 테이블 활용
  • 해시 크래킹 대응
    • 원문 복잡도 늘리기
    • 해시 다중 수행
    • 솔트 적용

4. Spring Security 응용

4-1. BCryptPasswordEncoder 의존성

  • Spring Security에서 제공하는 패스워드 암호화 도구
  • 평문 패스워드 해시를 DB에 저장하고, 로그인 시 입력 패스워드와 해시된 패스워드를 비교

4-2. 회원가입

  • SecurityConfiguration에 BCryptPasswordEncoder을 Bean으로 등록
  • 사용자 저장을 위한 엔티티, DTO 등을 설정
  • Service 레이어 등을 설정하고, 필요하다면 Role 지정 로직 추가
  • 가입 화면, 컨트롤러 등을 생성

4-3. 리다이렉션

  • SecurityFilterChain에 경로 지정
  • AuthenticationSuccessHandler를 상속해서 CustonAuthenticationSuccessHandler을 만들어주기

4-4. CSRF

  • Spring Security에서 CSRF 공격 방어를 위한 절차를 자동으로 수행
  • CSRF 비활성화 시 방어 절차를 생략 -> 선행 페이지를 사용하지 않고 API 호출 테스트 가능

0개의 댓글