Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions keyword/chapter10/chapter10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
## 키워드
### Spring Security
Spring Security는 Spring 기반 애플리케이션에서 인증(Authentication)과 권한(Authorization, 인가)을 처리하고, 다양한 보안 위협으로부터 애플리케이션을 보호하는 강력한 보안 프레임워크입니다.
***
### 인증(Authentication)과 인가(Authorization)
**인증(Authentication):**

사용자가 누구인지 확인하는 과정입니다. 예를 들어, 로그인 시 입력한 아이디와 비밀번호가 실제로 일치하는지를 검증하거나, OAuth2, JWT 등 외부 인증 방식을 사용할 수도 있습니다.

**권한(인가, Authorization):**

인증된 사용자가 어떤 리소스(페이지, API 등)에 접근할 수 있는지를 결정하는 과정입니다. 예를 들어, 관리자는 모든 페이지에 접근할 수 있지만, 일반 사용자는 일부 페이지만 접근하도록 제한할 수 있습니다.
***
### 세션과 토큰
세션(Session)**과 토큰(Token)은 웹 애플리케이션에서 사용자의 인증 상태를 유지하고 관리하는 대표적인 방식입니다.

**세션(Session)**

- **정의**:

세션은 사용자가 로그인한 이후 서버가 해당 사용자의 인증 정보를 메모리, 데이터베이스 등 서버 측에 저장하고, 클라이언트(브라우저)에는 세션 식별자(Session ID)만을 쿠키 등에 저장해 두는 방식입니다.

- **동작 방식**:
1. 사용자가 로그인하면 서버가 세션을 생성하고, 고유한 세션 ID를 발급합니다.
2. 이 세션 ID는 주로 쿠키에 저장되어 클라이언트에 전달됩니다.
3. 이후 클라이언트의 모든 요청에는 세션 ID가 함께 전송되고, 서버는 이 ID를 통해 해당 사용자의 인증 상태와 정보를 확인합니다.
4. 세션 정보는 서버에 저장되므로, 서버가 상태(state)를 관리합니다.
- **특징**:
- 서버가 인증 상태를 직접 관리(상태 유지, stateful).
- 서버 자원(메모리, DB 등)을 사용하여 세션 정보를 저장.
- 세션 ID 탈취 시 세션 하이재킹 등 보안 위협이 존재.

**토큰(Token)**

- **정의**:

토큰은 사용자가 인증에 성공하면 서버가 암호화된 토큰(예: JWT)을 발급하고, 이 토큰을 클라이언트가 저장하여 이후 요청마다 서버에 전달하는 방식입니다.

- **동작 방식**:
1. 사용자가 로그인하면 서버가 인증 정보를 확인하고, 토큰(Access Token 등)을 생성하여 클라이언트에 전달합니다.
2. 클라이언트는 이 토큰을 로컬스토리지, 세션스토리지 등 브라우저 저장소에 보관합니다.
3. 이후 요청마다 토큰을 HTTP 헤더(주로 Authorization 헤더)에 담아 서버에 전송합니다.
4. 서버는 토큰의 유효성만 검증하고, 별도의 세션 상태를 저장하지 않습니다(무상태, stateless).
- **특징**:
- 서버가 인증 상태를 저장하지 않음(무상태, stateless).
- 확장성과 분산 시스템에 유리.
- 토큰이 노출되면 정보가 유출될 수 있으므로, 토큰 자체의 보안이 중요
***
### 액세스 토큰(Access Token)과 리프레시 토큰(Refresh Token)
**엑세스 토큰**
엑세스 토큰은 인증이 완료된 사용자가 보호된 리소스(예: API, 데이터)에 접근할 수 있도록 권한을 부여하는 자격 증명입니다.
**리프레시 토큰**
리프레시 토큰은 엑세스 토큰이 만료되었을 때, 사용자가 다시 로그인하지 않고도 새로운 엑세스 토큰을 발급받을 수 있게 해주는 특별한 토큰입니다.