Project/Gameple

[Project - Gameple] Project Gameple(5) - Spring Security 적용하기

2023. 7. 7. 13:53
목차
  1. 개요
  2. Spring Security란?
  3. Spring Security를 적용하는 이유
  4. Spring Security 적용하기(1) - Spring Security 의존성 추가
  5. Spring Security 적용하기(1) - SecurityConfig 클래스 작성

개요

저번 포스팅에서는 프로젝트에 Swagger를 적용하여 API 명세 방법을 수립했었다.

이번 포스팅에서는 프로젝트에 Spring Security 적용하는 시간을 가져보겠다.

 

Spring Security란?

Spring Security

Spring Security란 Spring 기반의 애플리케이션의 보안(인증과 권한 부여, 인가 등)을 담당하는 스프링 하위 프레임워크이다.

 

Spring Security는 다양한 보안 기능을 제공하여 애플리케이션의 인증, 권한 부여, 접근 제어, 보안 설정 등을 처리할 수 있다.

Spring Security는 보안 필터 체인(Security Filter Chain)을 통해 보안 기능을 적용한다.

보안 필터 체인은 다양한 보안 필터로 구성되어 있으며, 각 필터는 특정한 보안 작업을 처리한다.

사용자 인증, 권한 부여, 세션 관리, CSRF 보호 등을 위한 보안 필터가 있고 요청이 들어올 때, 보안 필터 체인은 설정된 순서대로 실행되어 보안 작업을 수행하고 응답을 처리한다.

 

더 자세한 내용은 해당 공식 문서를 참고하자

https://spring.io/projects/spring-security

 

Spring Security

Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications. Spring Security is a framework that focuses on providing both authentication and authoriz

spring.io

 

Spring Security를 적용하는 이유

위에서 언급했듯이 Spring Security가 보안과 관련된 다양한 기능들을 제공해 주기에 우리는 Spring Security가 제공해 주는 옵션들을 잘 활용하여 보안 그룹을 구성해놓고 비즈니스 로직에 집중할 수 있도록 하기 위함이다.

 

Spring Security 적용하기(1) - Spring Security 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

Spring Security를 사용하기 위해서는 의존성을 추가해 주어야 한다. 

build.gradle로 이동하여 의존성을 추가하고 Gradle을 빌드 해준다.

 

Spring Security 적용하기(1) - SecurityConfig 클래스 작성

package com.gamepleconnect.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .csrf().disable()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers( "/auth", "/swagger-ui/**", "/v3/api-docs/**").permitAll()
                .anyRequest().authenticated();

        return httpSecurity.build();
    }
}

의존성을 추가했다면 Spring Security의 설정을 관리해 주는 SecurityConfig 클래스를 작성한다.

@EnableWebSecurity를 통해 Spring Security를 활성화하고 웹 보안 설정을 구성한다.

 

SecurityFilterChain를 Bean으로 등록하고 Security 설정들을 작성한다.

  1. csrf().disable()
  2. sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  3. antMatchers( "/auth", "/swagger-ui/**", "/v3/api-docs/**").permitAll()

위 설정들에 대해 살펴보자면

기본적으로 @EnableWebSecurity에서 CSRF 공격을 방지하는 기능을 제공하는데 1번에서는 CSRF Disable을 통해 CSRF 공격에 대한 옵션을 비활성화해주었다.

 

그 이유는 우리는 이번 프로젝트에서 JWT를 이용한 토큰 인증 방식을 사용하여 서버가 상태를 들고있지 않는 STATELESS한 환경을 구성할 것이기 때문이다.

인증 토큰을 쿠키가 들고있지 않는다면 CSRF 공격에 대해 어느정도 안전하다고 판단하기에 CSRF 옵션을 비활성화 해주었다.

 

2번에서는 세션 정책을 STATELESS 하게 설정하여 Spring Security에서 세션을 사용하지 않고 상태를 유지하는 STATELESS 한 인증 방식을 구현하게 한다.

 

3번에서는 파라미터가 포함하는 모든 엔드포인트에 대해 permitAll 옵션을 부여하여 해당 API 엔드포인트에 대해 인증 없이 사용 가능하도록 설정했다.

예를 들어 사용자가 인증 토큰이 없는 상태에서 로그인 / 회원가입 API를 호출했을 때 HTTP 403을 리턴하는 상황을 방지하고자 하기 위함이다.

로그인 / 회원가입과 같은 API들은 인증 토큰이 없어도 호출 가능해야 하기 때문이다.  

 

위 옵션들뿐만 아니라 더 다양한 옵션들이 존재하지만 이후에 OAuth를 도입하거나 권한 정책을 수립했을 때 추가로 옵션들을 구성해 보겠다.

저작자표시 비영리 동일조건 (새창열림)

'Project > Gameple' 카테고리의 다른 글

[Project - Gameple] Project Gameple(7) - 브랜치 API - IP 기반 국가 코드 조회 API  (0) 2023.09.13
[Project - Gameple] Project Gameple(6) - Game Entity 설계  (0) 2023.07.16
[Project - Gameple] Project Gameple(4) - Swagger 적용하기  (0) 2023.06.29
[Project - Gameple] Project Gameple(3) - 프로젝트 생성  (0) 2023.06.27
[Project - Gameple] Project Gameple(2) - 초기 아키텍처 설계  (0) 2023.06.26
  1. 개요
  2. Spring Security란?
  3. Spring Security를 적용하는 이유
  4. Spring Security 적용하기(1) - Spring Security 의존성 추가
  5. Spring Security 적용하기(1) - SecurityConfig 클래스 작성
'Project/Gameple' 카테고리의 다른 글
  • [Project - Gameple] Project Gameple(7) - 브랜치 API - IP 기반 국가 코드 조회 API
  • [Project - Gameple] Project Gameple(6) - Game Entity 설계
  • [Project - Gameple] Project Gameple(4) - Swagger 적용하기
  • [Project - Gameple] Project Gameple(3) - 프로젝트 생성
Doshisha
Doshisha
Doshisha
Doshisha
Doshisha
전체
오늘
어제
  • 분류 전체보기
    • Java
    • Spring
    • Project
      • Gameple
      • 피파온라인 검색 사이트
    • Node.js
    • DBMS
      • MySQL
      • MSSQL
    • AWS
    • BOJ
    • 프로그래머스
    • 프로그래머스-SQL
    • 컴퓨터 구조
    • 네트워크
    • Git
    • IDE
    • 후기 및 회고
    • 기타
    • Linux
    • Frontend
      • Vue.js
      • jQuery
      • JavaScript
    • Unity
    • WAS
      • Tomcat
    • Jenkins

블로그 메뉴

  • 방명록
  • Github

공지사항

인기 글

태그

  • 백준
  • 일본
  • Gameple
  • 카카오 코딩테스트
  • 자바
  • MySQL
  • 카카오 코테
  • mysql 서브쿼리
  • 넥슨 오픈 API
  • SpringBoot Jenkins
  • 모두의 네트워크
  • 게임 플랫폼 개발
  • Spring Data JPA
  • 프로그래머스 SQL
  • BFS
  • boj
  • 카카오
  • c++
  • 코테
  • 문자열
  • SpringBoot Jenkins CI/CD
  • DP
  • 프로그래머스
  • 게임 플랫폼
  • 구현
  • 백트래킹
  • 게임 API 연동
  • java
  • C++ BFS
  • 네트워크

최근 댓글

최근 글

hELLO · Designed By 정상우.
Doshisha
[Project - Gameple] Project Gameple(5) - Spring Security 적용하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.