Spring Security?
Spring Security는 Java 애플리케이션에서 인증(authentication)과 권한 부여(authorization)을 제공하는 프레임워크입니다. 이 프레임워크는 애플리케이션에서 사용자의 인증 정보를 검사하고, 권한에 따라 접근을 제어할 수 있도록 해줍니다.
Spring Security는 민감한 정보를 보호하고 CSRF(Cross-Site Request Forgery) 및 SQL 주입 공격과 같은 일반적인 보안 위협으로부터 보호하는 기능뿐만 아니라 인증, 권한 부여 및 액세스 제어를 포함한 광범위한 보안 기능을 제공합니다.
Spring Security를 사용하면 특정 URL 패턴, 메서드 호출 또는 개별 웹 페이지에 대한 보안 규칙을 정의하여 애플리케이션을 쉽게 보호할 수 있습니다. 이 프레임워크는 유연하고 사용자 정의 가능한 인증 및 권한 부여 메커니즘을 제공하여 사용자 정의 보안 요구 사항을 쉽게 구현할 수 있도록 합니다. 또한 Spring Security는 다른 Spring 프로젝트와 원활하게 통합되므로 안전한 엔터프라이즈급 애플리케이션을 구축하는 데 이상적인 솔루션입니다.
CSRF(Cross-Site Request Forgery) 가 뭐지?
사이트 간 요청 위조 - 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.
사용자가 특정 서버에 로그인하면 일반적으로 다음과 같은 작업들이 수행됩니다.
- 서버는 로그인 시 인증된 사용자의 정보를 세션(session)에 저장하고, 이를 찾을 수 있는 sessionID을 만듭니다.
- 서버는 저장된 세션 정보를 클라이언트(브라우저)가 사용할 수 있도록 sessionID를 Set-Cookie 헤더에 담아서 전달합니다.
- 클라이언트(브라우저)는 전달된 sessionID를 쿠키에 저장합니다.
- 클라이언트(브라우저)는 해당 도메인을 가진 서버로 요청 시 쿠키에 저장된 sessionID를 자동으로 전달합니다.
- 서버는 쿠키에 담긴 sessionID를 통해 인증된 사용자인지 여부를 확인합니다.
쿠키가 없으면 CSRF 공격도 없다. 브라우저에 저장되는 쿠키가 CSRF 공격의 매개체이다. 최근 많이 사용하는 REST API 방식은 쿠키나 세션에 의존하지 않는 경향이 크기 때문에 CSRF 공격에 대한 방어 설정을 비활성화시키는 경우가 많다.쿠키 대신에 로컬 스토리지(localStorage)와 요청 헤더(Request Header) 사용하거나, 세션 대신에 JWT(Json Web Token)을 사용하기 때문이다.
Spring Security 적용
maven - pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Spring Security 사용 방법:
- Spring Security 의존성 추가 : Maven을 사용하는 경우 pom.xml 파일에 Spring Security 의존성을 추가합니다. Gradle을 사용하는 경우 build.gradle 파일에 Spring Security 의존성을 추가합니다.
- SecurityConfig 클래스 생성 : Spring Security 설정을 관리하는 SecurityConfig 클래스를 생성합니다. 이 클래스는 @Configuration 어노테이션으로 구성되고, @EnableWebSecurity 어노테이션으로 웹 보안 기능을 활성화합니다.
- 인증 및 권한 부여 설정 : SecurityConfig 클래스에서 인증 및 권한 부여 정책을 정의합니다. 예를 들어, 인증에 사용할 사용자 이름과 비밀번호, 권한 부여에 사용할 권한 목록 등을 정의할 수 있습니다.
- 인증 검사 : SecurityConfig 클래스에서 인증 검사 로직을 정의합니다. 예를 들어, 사용자 이름과 비밀번호를 검사하고 일치하지 않을 경우 예외를 발생시키는 로직을 정의할 수 있습니다.
- URL 권한 부여 : SecurityConfig 클래스에서 URL에 대한 권한 부여 정책을 정의합니다. 예를 들어, 인증된 사용자만 접근할 수 있는 URL과 인증되지 않은 사용자도 접근할 수 있는 URL을 정의할 수 있습니다.
- 로그인 페이지 정의 : SecurityConfig 클래스에서 로그인 페이지에 대한 정보를 정의합니다. 예를 들어, 로그인 페이지 URL, 인증 실패시 리다이렉트할 URL 등을 정의할 수 있습니다.
- 실행 : 설정이 완료되면 Spring Security를 실행합니다. 이제 인증 및 권한 부여 정책에 따라 URL 접근이 제한될 것입니다.
reference
'Spring' 카테고리의 다른 글
Spring library 스프링 라이브러리 (0) | 2023.03.02 |
---|---|
@Autowired 와 DI(Dependency Injection) (0) | 2023.02.15 |
Spring Bean (Singleton) 스프링 빈 싱글톤? (0) | 2023.02.07 |
Spring Annotation 정리 (1) | 2023.02.07 |
AOP(Aspect Oriented Programming) 란? (0) | 2023.02.06 |