-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f42d6ac
commit f894ddc
Showing
1 changed file
with
83 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# Spring Security | ||
|
||
오늘은 프리랜서로 첫 출근을 하여 받은 과제 중 **Spring Security**를 사용하여 로그인 인증을 구현해보라는 과제를 받아 작업 한 김에 **Spring Security**에 대해 이야기해보려 한다. | ||
**Spring Security**는 Java 기반 애플리케이션에서 보안을 담당하는 프레임워크로 인증과 권한 부여(Authentication and Authorization)를 중심으로, 애플리케이션을 외부 공격으로부터 보호하고, 사용자 액세스를 관리하는 데 최적화된 도구다. | ||
|
||
--- | ||
|
||
## 1. Spring Security란? | ||
|
||
Spring Security는 **Spring Framework**의 하위 프로젝트로, 애플리케이션에 손쉽게 보안 기능을 추가할 수 있도록 설계된 프레임워크다. | ||
주요 기능은 다음과 같다: | ||
- **인증(Authentication)**: 사용자의 신원을 확인하는 과정. | ||
- **권한 부여(Authorization)**: 인증된 사용자가 시스템에서 어떤 자원에 접근할 수 있는지 결정. | ||
- **공통 보안 위협 방어**: CSRF, XSS, 세션 고정 공격 등 다양한 보안 위협을 방어. | ||
|
||
Spring Security는 설정만으로도 강력한 보안 기능을 제공하며, 애플리케이션 요구사항에 따라 손쉽게 확장할 수 있다. | ||
|
||
--- | ||
|
||
## 2. Spring Security의 주요 개념 | ||
|
||
### **1) 인증(Authentication)** | ||
- **사용자의 신원 확인** 과정이다. | ||
사용자가 제공한 정보(예: 사용자 이름과 비밀번호)가 올바른지 확인하며, 일반적으로 로그인 과정에서 수행된다. | ||
|
||
### **2) 권한 부여(Authorization)** | ||
- **사용자의 역할(Role)에 따른 자원 접근 관리**를 담당한다. | ||
예를 들어, 관리자만 접근 가능한 페이지와 일반 사용자 페이지를 구분하여 관리할 수 있다. | ||
|
||
### **3) 필터 체인(Filter Chain)** | ||
- Spring Security는 요청을 처리하기 위해 여러 필터를 사용한다. | ||
이 필터 체인은 요청과 응답을 가로채어 인증 및 권한 부여를 수행한다. | ||
요청이 필터 체인을 통과해야 애플리케이션으로 전달될 수 있다. | ||
|
||
### **4) CSRF 방어** | ||
- CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 Spring Security는 기본적으로 CSRF 토큰을 활성화한다. | ||
이를 통해 외부 사이트에서 사용자의 애플리케이션 상태를 변경하려는 요청을 차단할 수 있다. | ||
|
||
--- | ||
|
||
## 3. Spring Security의 장점 | ||
|
||
### **1) 강력한 기본 보안** | ||
- Spring Security는 초기 설정만으로도 로그인, 로그아웃, 비밀번호 암호화 등 기본적인 보안 기능을 제공한다. | ||
|
||
### **2) 유연한 커스터마이징** | ||
- 애플리케이션 요구사항에 맞게 인증/권한 부여 로직, 사용자 저장소, 필터 체인 등을 자유롭게 설정할 수 있다. | ||
|
||
### **3) 다양한 인증 방법 지원** | ||
- Spring Security는 **Form-Based Login**, **OAuth2**, **JWT**, **Basic Authentication** 등 다양한 인증 방식을 지원한다. | ||
이를 통해 현대적인 인증 요구사항을 유연하게 처리할 수 있다. | ||
|
||
### **4) 스프링 생태계와의 통합** | ||
- Spring Boot와 함께 사용하면 간단한 설정으로 보안 기능을 활성화할 수 있다. | ||
또한, Spring Data, Spring MVC 등 다른 Spring 프로젝트와도 자연스럽게 통합된다. | ||
|
||
--- | ||
|
||
## 4. Spring Security 적용 시 주의사항 | ||
|
||
### **1) 디폴트 설정에 의존하지 말라** | ||
- Spring Security는 강력한 디폴트 설정을 제공하지만, 애플리케이션에 맞는 커스터마이징이 필요하다. | ||
예를 들어, 모든 경로를 동일한 권한으로 보호하기보다는, 경로별로 적절한 권한을 설정해야 한다. | ||
|
||
### **2) 암호화 및 키 관리** | ||
- 비밀번호는 반드시 암호화하여 저장해야 하며, Spring Security에서 제공하는 `BCryptPasswordEncoder` 같은 암호화 도구를 활용하자. | ||
또한, 인증 토큰이나 키 관리에 소홀하지 않도록 주의해야 한다. | ||
|
||
### **3) 세션 관리** | ||
- 세션 고정 공격 방지를 위해 세션을 안전하게 관리해야 한다. | ||
특히, 다중 로그인 제어, 세션 만료 시간 설정 등 세부적인 정책이 필요하다. | ||
|
||
### **4) CSRF 설정** | ||
- Spring Security는 기본적으로 CSRF 방어를 활성화하지만, API 서버에서는 종종 비활성화한다. | ||
REST API를 개발할 때는 CSRF가 필요 없는 경우를 고려하여 적절히 설정해야 한다. | ||
|
||
--- | ||
|
||
## 결론 | ||
|
||
Spring Security는 Java 애플리케이션 보안의 표준 도구로, 강력한 보안 기능과 유연한 커스터마이징 옵션을 제공한다. | ||
인증과 권한 부여뿐만 아니라, 다양한 보안 위협으로부터 애플리케이션을 보호할 수 있다. | ||
다만, 기본 설정에 의존하지 않고 애플리케이션 요구사항에 맞게 커스터마이징하는 것이 중요하다. |